ios - SCNetworkReachability 是否遵守 HTTP 代理设置?

标签 ios proxy reachability

恐怕答案是否定的,但我希望有人能提供明确的答案,因为当前的 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/

相关文章:

java - 处理电子邮件服务器时如何处理代理?

php - 用PHP代码移动托管服务后出现错误

timeout - XMPPFramework:发送超时消息

iphone - 即使无线可用,SCNetworkReachabilityGetFlags 也会返回 0

c++ - 未在此范围内声明 C++

ios - 在 UIPageView 最后一页上滑动 Segue

html - UIWebView 中的本地 html,带有 Assets 目录中的图像

ios - UIWebView webViewDidStartLoad 方法未在 swift 中调用

ios - 在 UIKit 中实现滑动分页横幅

javascript - insertBefore 代理元素 : parameter 2 is not of type 'Node'