失败:错误域=NSURLErrorDomain 代码=-1004“无法连接到服务器。”

Posted

技术标签:

【中文标题】失败:错误域=NSURLErrorDomain 代码=-1004“无法连接到服务器。”【英文标题】:FAILURE: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." 【发布时间】:2017-07-22 01:31:45 【问题描述】:

首先,我想列出我已阅读并尝试实施答案的帖子(避免重复):

App Transport Security issue in ios 9 and iOS 10 http://iosdevtips.co/post/121756573323/ios-9-xcode-7-http-connect-server-error http://www.neglectedpotential.com/2015/06/working-with-apples-application-transport-security/

我正在开发一个 SDK,并且我已经创建了一些 UI 测试。我试图不连接到后端系统并通过在测试时在本地机器上运行的存根服务器来模拟它们。所有请求都必须发送到此服务器。

我创建了一个永远不会提交到 App Store 的虚拟应用程序。通过这个应用程序,我计划测试 SDK 的屏幕。我关注了上面的帖子和文章,并在虚拟应用程序的 Info.plist 文件中包含了一个与我的本地主机服务器的不安全连接的异常。如下所示:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>localhost</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

是的,我允许各种例外情况。网络响应不会抱怨应用程序没有与 localhost 的不安全连接异常,而只是返回以下内容:

[Result]: FAILURE: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo=NSUnderlyingError=0x170248940 Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo=_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1, NSErrorFailingURLStringKey=http://localhost:7878/endpoint, NSErrorFailingURLKey=http://localhost:7878/endpoint, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.
[Timeline]: Timeline:  "Request Start Time": 510144201.835, "Initial Response Time": 510144201.860, "Request Completed Time": 510144201.860, "Serialization Completed Time": 510144201.860, "Latency": 0.025 secs, "Request Duration": 0.025 secs, "Serialization Duration": 0.000 secs, "Total Duration": 0.025 secs 

我查看了服务器日志,但没有任何报告。因此,我假设它不会完全命中服务器。

任何帮助将不胜感激。 :)

谢谢

【问题讨论】:

再次检查服务器 URL。 我已经复制并粘贴了出错的网址,然后将其卷曲并可以正常工作 你在什么设备上运行这个?模拟器还是真机?我认为问题出在 localhost 服务器端点。您是否尝试将其指向云服务器? 哦,拍! @Teffi 你搞定了,在没有查看目标设备的设备上运行! 如果iphone和电脑在同一个wifi上。如果你使用 apache。那么您所需要的就是获取计算机本地 IP 地址并使用该 IP 地址更改 localhost 【参考方案1】:

正如@Teffi 在 cmets 中指出的那样,我在无法访问本地计算机上运行的本地主机服务器的设备上运行测试。

【讨论】:

很容易忘记! 使用 Little Snitch 时可能会发生类似的问题,即使 URL 是针对远程服务器的。需要确保 Little Snitch 允许连接通过。 我不确定这种情况下的解决方案是什么?【参考方案2】:

为我解决

我也遇到过同样的问题,现在已经解决了。当我停止并启动我的 aws 实例时,连接字符串已更改。单击连接按钮后,您可以在您的 aws 上找到此更改的连接字符串。然后用这个新的 url 替换旧的 url 到你的 AppDelegateo 类(已经有一个)

希望得到它。

【讨论】:

以上是关于失败:错误域=NSURLErrorDomain 代码=-1004“无法连接到服务器。”的主要内容,如果未能解决你的问题,请参考以下文章

失败:错误域=NSURLErrorDomain 代码=-1004“无法连接到服务器。”

使用 Swift 3.0 的 Alamofire 4 失败:错误域 = NSURLErrorDomain 代码 = -999 “已取消”

Swift 错误域=NSURLErrorDomain 代码=-1012

错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。”

错误:错误域=NSURLErrorDomain 代码=-1001 “请求超时。”

错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。”