SCNetworkReachability是否尊重HTTP代理设置?

时间:2011-09-02 16:14:56

标签: ios proxy reachability

我担心答案是否定的,但我希望有人可以提供明确的答案,因为目前的iOS SDK文档中没有记录。

我们看到NSURLConnection能够通过HTTP代理连接到https://mysite.com的情况,但由于在这种情况下设置本地DNS的方式,mysite.com的DNS查找将失败。在这种情况下,似乎SCNetworkReachability正在尝试为mysite.com执行DNS查找并失败。同时,NSURLConnection能够连接。

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

1 个答案:

答案 0 :(得分:2)

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

该应用程序一直运行良好,但最近我一直在做一些编码工作,网络访问是通过企业HTTP代理。在iOS模拟器中运行应用程序(使用我的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热点)可能存在问题。