繁体   English   中英

Swift URLSession.shared.dataTask GET Request -1001返回超时

[英]Swift URLSession.shared.dataTask GET Request -1001 returns timeout

将POST请求发送到我们的NGINX服务器可与URLRequestURLSession.shared.dataTask一起很好地工作。 我可以登录我的应用程序,但是当我尝试GET请求时,我的服务器没有该请求到达他的日志。 最后,我收到超时错误。 重要提示,我正在使用https。 我也尝试将http用于GET请求。 在我的NGINX服务器上,我仅将TLS设置为1.2(我不是系统专家,我在nginx cfg文件中做到了这一点。

错误域= NSURLErrorDomain代码= -1001“在Anforderung区域中。 UserInfo = {NSUnderlyingError = 0x60400005abe0 {Error Domain = kCFErrorDomainCFNetwork Code = -1001“(null)” UserInfo = {_ kCFStreamErrorCodeKey = -2102,_kCFStreamErrorDomainKey = 4}},NSErrorFailingURLStringKey = https:// myurl ,NSErrorFailingURLKey = https:// myurl , _kCFStreamErrorDomainKey = 4,_kCFStreamErrorCodeKey = -2102,NSLocalizedDescription =位于安福德格伦(Zeitüberschreitung)附近。}

我确信URLRequestURLSession代码是正确的,因为针对localhost和我们的开发环境,我没有任何这些问题。

那就是我的代码来创建我的URLRequest

private func buildUrlRequest(jsonObject:[String: Any], connectionType:ConnectionTypes, url:String) -> NSMutableURLRequest? {
    let jsonDataSerialized:Data
    do {
        jsonDataSerialized = try JSONSerialization.data(withJSONObject: jsonObject)
    } catch {
        return nil
    }
    var request:NSMutableURLRequest
    if nextData {
        request = URLRequest(url: URL(string: self.nextRequestPage)!) as! NSMutableURLRequest
    } else {
        let tString = self.mBaseUrl + url
        if let encoded = tString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed),
            var finalurl = URL(string: encoded)
        {
            if connectionType == .GET {
                var tString:String
                tString=finalurl.absoluteString
                tString = tString.replacingOccurrences(of: "https", with: "http")
                finalurl = URL(string:tString)!
            }
            request = URLRequest(url: finalurl) as! NSMutableURLRequest
        } else {
            return nil
        }
    }
    request.httpMethod = connectionType.rawValue // i am using enum here
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue("no-cache)", forHTTPHeaderField: "Cache-Control")
    request.httpBody = jsonDataSerialized
    if mUser != nil && mUser.getSessionId() != nil {
        request.addValue("Token " + mUser.getSessionId()!, forHTTPHeaderField: "Authorization")
    }
    request.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData
    request.timeoutInterval = 30.0
    return request
}

这就是我创建任务的方式...在我使用task.resume()的方法体之后

let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in .... (and so on)

我花了多个小时来解决这个问题...但是我不知道。 我不确定问题是服务器配置还是Swift代码...

主要问题是jsonObject:[String: Any] 我将其更改为jsonObject:[String: Any]?

在我的代码中,无论是POST GET PUT还是其他任何事情,我都为每个请求创建了正文。 在GET请求中没有http-body,我再也没有问题了,没有超时! 我正确地收到了预期的数据。

我还发现,仅在我的情况下,不需要设置nginx或让sll_protocols加密为TLS 1.2。

我希望如果有人遇到此问题,他们会找到这篇文章:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM