Alamofire:错误域=NSURLErrorDomain 代码=-1004“无法连接到服务器。”尝试在同一应用会话中从 https 切换到 http

我们在两种类型的硬件设备上有类似的服务器,我们需要使用 iOS 应用程序连接到它们。目前,我们使用 Alamofire 4.9.1 来处理所有 API 请求。

以前,我们在服务器上仅支持 http 端点,但最近我们已在最新版本的设备上改用 https。应用需要同时支持两者。

我们面临的问题是,当我们连接到设备 X(支持 https),然后尝试连接到设备 Y(仅支持 http) strong>,我们收到此错误

[Error] GET 'http://172.30.1.1/file.xml' [27.7252 s]:

Error Domain=nsurlerrordomain Code=-1004 "Could not connect to the server." UserInfo={​​​​​​​NSUnderlyingError=0x281f2fde0 {​​​​​​​Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo={​​​​​​​_kCFStreamErrorCodeKey=61,_kCFStreamErrorDomainKey=1}​​​​​​​}​​​​​​​,NSErrorFailingURLStringKey=https://172.30.1.1/file.xml,NSErrorFailingURLKey=https://172.30.1.1/file.xml,_kCFStreamErrorDomainKey=1,_kCFStreamErrorCodeKey=61,NSLocalizedDescription=Could not connect to the server.}​​​​​​​

直接连接到设备 Y(http) 而不先连接到设备 X(https) 工作正常,如果我们终止应用程序,在出现错误后我们可以连接到设备 Y(http)。即使我们在 Alamofire 中使用不同的 Sessionmanager 也会发生这种情况。

这是因为我们使用的是同一个IP地址吗?如果我们检查错误 NSErrorFailingURLStringKey,它仍然是 https,尽管我们调用的 url 是 http。

我在这里粘贴相关代码

    private var manager: Alamofire.Sessionmanager = {
        let configuration = URLSessionconfiguration.default
        let manager = Alamofire.Sessionmanager(configuration: configuration)
        manager.retrier = RetryHandler()
        return manager
    }()

    private var manager2: Alamofire.Sessionmanager = {
        var serverTrustPolicies: [String: ServerTrustPolicy] = [
            "172.30.1.1": .disableEvaluation
        ]
        let config = URLSessionconfiguration.ephemeral
       
        //Adding TrustManager to Allow All Certificates
        let manager = Alamofire.Sessionmanager(configuration: config,serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies))
        manager.adapter = RequestInterceptor()
        manager.retrier = RequestInterceptor()
        
        return manager
    }()

我们已经尝试过的事情:

  • 使用不同的 UrlSessionconfiguration
  • 设置 config.urlcache = nil
z15dgh354588 回答:Alamofire:错误域=NSURLErrorDomain 代码=-1004“无法连接到服务器。”尝试在同一应用会话中从 https 切换到 http

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1058317.html

大家都在问