恐怕答案是否定的,但我希望有人能提供明确的答案,因为当前的 iOS SDK 文档中没有记录。
我们看到 NSURLConnection 能够连接到 https://mysite.com 的情况通过 HTTP 代理,但由于在这种情况下设置本地 DNS 的方式,mysite.com 的 DNS 查找将失败。在这种情况下,似乎 SCNetworkReachability 正在尝试对 mysite.com 执行 DNS 查找但失败了。同时,NSURLConnection 能够连接。
我们已将 Apple Reachability 示例代码合并到我们的应用程序中,并使用 mysite.com 调用 SCNetworkReachabilityCreateWithName。
最佳答案
我无法提供明确的答案,但我可以提供更多的经验证据和一些理由来证明答案是否定的。我有一个应用程序使用 SCNetworkReachabilityGetFlags
检查特定主机是否可达(例如:www.mysite.com)。根据可达性检查,它然后使用 [NSMutableData dataWithContentsOfURL:]
下载数据。
该应用程序一直运行良好,但最近我在工作中编写了一些代码,其中网络访问是通过公司 HTTP 代理进行的。在 iOS 模拟器(使用我的 Mac 上配置的代理设置)中运行应用程序时,可达性检查失败。起初我以为 iOS 模拟器可能没有使用 Mac 的代理设置,但模拟器中的 Mobile Safari 运行良好。所以我删除了我的应用程序中的可达性检查,并且对 [NSMutableData dataWithContentsOfURL:]
的调用工作正常。这似乎表明 SCNetworkReachability 不遵守代理设置。
考虑一下,如果您将 SCNetworkReachability 视为在 TCP/IP 级别而不是 HTTP 级别运行,这可能是正确的行为,就像 ping google.com
在公司防火墙后面的 Mac/PC 也不起作用。 HTTP 代理(顾名思义)是针对 HTTP 协议(protocol)的,而不是整个 TCP/IP 堆栈。
已阅读 this question on Reachability 的答案我倾向于完全放弃可达性检查。尽管直到现在这只是模拟器中的一个问题,但在其他情况下(例如,需要身份验证的公共(public) WiFi 热点)也可能存在问题。
关于ios - SCNetworkReachability 是否遵守 HTTP 代理设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7286329/