2011-09-02 66 views
4

恐怕这个答案是否定的,但我希望有人能够提供一个明确的答案,因为它没有在当前的iOS SDK文档中记录。SCNetworkReachability是否尊重HTTP代理设置?

我们看到NSURLConnection能够通过HTTP代理连接到https://mysite.com的情况,但由于在这种情况下设置了本地DNS,所以mysite.com的DNS查找将失败。在这种情况下,看起来SCNetworkReachability试图为mysite.com执行DNS查找并失败。同时,NSURLConnection可以连接。

我们已将Apple Reachability示例代码合并到我们的应用程序中,并正在使用mysite.com调用SCNetworkReachabilityCreateWithName。

回答

2

我不能提供明确的答案,但我可以提供更多的经验证据和一些理由,答案是否定的。我有一个应用程序使用SCNetworkReachabilityGetFlags来检查特定主机是否可访问(例如:www.mysite.com)。根据可达性检查,然后使用[NSMutableData dataWithContentsOfURL:]下载数据。

该应用程序一直运行良好,但最近我一直在做一些编码工作,其中网络访问是通过企业HTTP代理。在iOS Simulator(使用我的Mac上配置的代理设置)中运行应用程序时,可达性检查失败。起初我以为iOS模拟器可能没有使用Mac的代理设置,但模拟器中的Mobile Safari运行良好。所以我删除了我的应用程序中的可达性检查,并呼吁[NSMutableData dataWithContentsOfURL:]工作正常。这似乎表明SCNetworkReachability不尊重代理设置。

考虑到这一点,如果您将SCNetworkReachability视为在TCP/IP级别运行,而不是在HTTP级别运行,则与公司防火墙后面的Mac/PC上的ping google.com运行方式相同也不行。 HTTP代理(顾名思义)是用于HTTP协议,而不是整个TCP/IP协议栈。

在阅读this question on Reachability的答案后,我倾向于将我的可达性检查完全删除。尽管到目前为止它只是模拟器中的一个问题,但在其他情况下(例如需要验证的公共WiFi热点)可能会有问题。