SCNetworkReachability是否尊重HTTP代理设置?

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

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

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

我不能提供明确的答案,但我可以提供更多的经validation据和一些理由,答案是否定的。 我有一个使用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堆栈。

在阅读了关于可达性的这个问题的答案后,我倾向于完全依靠我的可达性检查。 尽管直到现在它只是模拟器中的一个问题,但在其他情况下(例如需要认证的公共WiFi热点)可能会出现问题。