【问题标题】:Does SCNetworkReachability respect HTTP proxy settings?SCNetworkReachability 是否尊重 HTTP 代理设置?
【发布时间】:2011-09-02 16:14:55
【问题描述】:

恐怕这个问题的答案是否定的,但我希望有人能提供一个明确的答案,因为它没有记录在当前的 iOS SDK 文档中。

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

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

【问题讨论】:

    标签: ios proxy reachability


    【解决方案1】:

    我无法提供明确的答案,但我可以提供更多的经验证据和一些理由来证明答案是否定的。我有一个应用程序使用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 热点)可能会出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多