日志含义Alamofire JSON POST报错:网络连接丢失



很多人因为不同的原因得到这个错误。我找到的答案没有一个能解决我的问题。

我使用Timberjack来记录我的Alamofire请求。

我所有的GET请求工作正常,我在JSON中接收数据。另一方面,如果POST包含JSON主体,我的POST每次工作大约1/10。

服务器没有指定任何Keep-Alive头。

部署目标是iOS 9.0

这是我和Timberjack共享的Manager:

class HTTPManager: Alamofire.Manager{
    static let sharedManager: HTTPManager = {
        let configuration = Timberjack.defaultSessionConfiguration()
        let manager = HTTPManager(configuration: configuration)
        return manager
    }()
}

定义请求:

let parameters: [String: AnyObject] = ["status":status]
request = HTTPManager.sharedManager.request(.POST, "(baseURL)(uri)", parameters: parameters, encoding: .JSON).validate()

发送请求:

request!.responseJSON(queue: queue, options: .AllowFragments, completionHandler: { (response) in
                        //Handling the response
})

大多数情况下,服务器接收到一个空的JSON主体。但有时它确实工作,并且接收到主体,服务器响应一个OK。当它不工作时,我收到错误:

Error: The network connection was lost.
FAILURE: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." 
UserInfo={NSUnderlyingError=0x12fa47cb0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "The network connection was lost." 

如果有人能解释一下这里发生了什么,我将永远感激不尽:)

编辑1 我们让服务器用"Connection": "close"来响应每个调用,这对解决问题没有任何帮助。默认情况下,应用程序总是发送"Connection": "keep-alive",并且不能更改。这就是问题所在吗?应用程序认为连接是打开的,即使它被服务器关闭了?但是,即使您等待了几分钟,POST调用似乎也只是随机工作。

编辑2 即使在GET(s)和/或POST(s)之间等待30秒。GET总是有效的。POST是随机工作的(很少)。我得到-1005错误的大多数帖子。即使我得到网络连接丢失的错误,服务器仍然收到我的请求,但JSON体丢失。

EDIT 3 -丑解在我的响应中,我检查错误代码-1005,当我收到此错误时,我只是重新创建请求并再次尝试。这导致发送大约2-4个POST请求到服务器,其中一个POST工作,其余的都是空的JSON主体。

重新启动模拟器通过抛出任务来终止应用程序

或查看此错误代码的更多解决方案:

NSURLErrorDomain Code -1005网络连接丢失

最新更新