Domain=NSURLErrorDomain Code=-1005 "swift5 网络连接丢失

Posted

技术标签:

【中文标题】Domain=NSURLErrorDomain Code=-1005 "swift5 网络连接丢失【英文标题】:Domain=NSURLErrorDomain Code=-1005 "The network connection was lost in swift5 【发布时间】:2021-12-28 09:57:29 【问题描述】:

我正在使用 swift5 和 Xcode 版本 13.0 (13A233)。我正在使用可可豆

 pod 'Alamofire' , '~> 4.9.1'

我只是使用 IP 连接,它工作正常。但是当我连接到像 https://www.example.net 这样的域时,它显示

     Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo=_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x600002af2b50 Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo=NSErrorPeerAddressKey=<CFData 0x6000007c8230 [0x1056ddaf0]>length = 16, capacity = 16, bytes = 0x100201bb772858170000000000000000, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <A49E8D5B-1DE3-487C-B4F7-50376AF188AE>.<3>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
        "LocalDataTask <A49E8D5B-1DE3-487C-B4F7-50376AF188AE>.<3>"
    ), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://www.example.net/api/second-api, NSErrorFailingURLKey=https://www.example.net/api/second-api, _kCFStreamErrorDomainKey=4

我还添加了如下所示的应用程序传输安全设置&这里是图片

这是我使用的代码..

    API 一:

        func firstApi() 
    
            Alamofire.request("https://www.example.net/api/first-api", method: .post, parameters: [
                "param1":"",
                "param2":"",
            ],headers: headers).responseJSON [self](responseData) -> Void in
                secondApi()
            
    
        
    

    API 二:

          func secondApi() 
    
            Alamofire.request("https://www.example.net/api/second-api", method: .post, parameters: [
                "param1":"",
                "param2":"",
                "param3":"",
            ],headers: headers).responseJSON [self](responseData) -> Void in
    
            
    
        
    

在上面的代码中,我从第一个 API 调用了第二个 API。第一个 API 响应良好。但在我从第一个 API 响应调用的第二个 API 中显示上述错误..

但仅调用了单个 API,但是当我从单个 API 调用另一个 API 时显示错误

我不知道是什么原因。请帮我解决问题..

【问题讨论】:

我建议升级到 Alamofire 5(没有理由在新代码中使用 4),然后调试与故障域的连接。其他工具可以连接吗?浏览器可以吗? @JonShier 我用过 android & 我也从本地测试过,它基于 IP,如 ip 。它工作正常,但是当我从 domin 调用时它显示错误 【参考方案1】:

您有 2 个可以从不同线程触发的异步调用,其中一个在另一个的闭包内触发。 当您从 firstApi 调用 secondApi 时,它会触发请求并完成。

如果您需要从另一个 API 的响应中调用第二个 api,我建议您使用完成块作为参数并运行您需要运行的内容或使用同步而不是异步调用它们。

永远不要进行睡眠调用,这现在用于 swift 并且不能解决您的问题,因为这可能会有很大差异。

    func doSomething() 
        firstApi() 
            secondApi()
        
    


    func firstApi(completion: @escaping () -> Void) 

        Alamofire.request("https://www.example.net/api/first-api", method: .post, parameters: [
            "param1":"",
            "param2":"",
        ],headers: headers).responseJSON [self](responseData) -> Void in
            completion()
        

    

    func secondApi(completion: @escaping () -> Void) 

        Alamofire.request("https://www.example.net/api/second-api", method: .post, parameters: [
            "param1":"",
            "param2":"",
            "param3":"",
        ],headers: headers).responseJSON [self](responseData) -> Void in
            completion()
        

    

【讨论】:

【参考方案2】:

我已经解决了,只是添加

do 
     sleep(1)
   

我的 secondApi 如下所示:

  func secondApi() 

   do 
      sleep(1)
     

   Alamofire.request("https://www.example.net/api/second-api", method: .post, parameters: [
        "param1":"",
        "param2":"",
        "param3":"",
    ],headers: headers).responseJSON [self](responseData) -> Void in

    


【讨论】:

以上是关于Domain=NSURLErrorDomain Code=-1005 "swift5 网络连接丢失的主要内容,如果未能解决你的问题,请参考以下文章

ios奇葩问题 Error Domain=NSURLErrorDomain Code=-1003

关于https的Error:Error Domain=NSURLErrorDomain Code=-1012

Error Domain=NSURLErrorDomain Code=-1001 "请求超时。 问题解决

为啥 NSURLConnection 失败,错误 Domain=NSURLErrorDomain Code=-1005 “网络连接丢失。”在 Swift iOS8 中?

Error Domain=NSURLErrorDomain Code=-999 “The operation couldn’t be completed.

ios 跳过对https 的验证(Error Domain=NSURLErrorDomain Code=-999)