ios – SCNetworkReachability是否尊重HTTP代理设置?

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

我们看到NSURLConnection能够通过HTTP代理连接到https://mysite.com但是,由于在这种情况下设置本地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级别运行,这可能是正确的行为,就像在企业防火墙后面的Mac / PC上ping google.com一样也工作. HTTP代理(顾名思义)是HTTP协议,而不是整个TCP / IP堆栈.

读完this question on Reachability的答案之后,我倾向于完全依靠我的可达性检查.尽管直到现在它只是模拟器中的问题,但在其他情况下(例如需要认证的公共WiFi热点)可能存在问题.

点赞