【问题标题】:NSURLConnection refuses to use OSX System Proxy SettingsNSURLConnection 拒绝使用 OSX 系统代理设置
【发布时间】:2013-06-08 00:23:53
【问题描述】:

好吧,我读过的所有书,和我交谈过的每个人都说 NSURLConnection 在异步模式下使用时应该自动使用 OSX 的系统代理设置。

这是我所做的:

  1. 使用基本身份验证通过端口 8080 在另一台主机上设置 squid 代理。
  2. 在我的 Mac 上的系统代理设置中设置此代理。
  3. 设置 NSURLConnection 代码,用于处理异步通信所需的 NSURLConnectionDelegate 方法。我在所有委托方法中都有断点,包括 challengeAuthentication 。代码尝试连接的 http 地址是 http://api.box.com 地址。

结果:

  1. 我的所有 OSX/Mac 机器的流量都成功通过了我的代理,我可以通过 squid 的访问日志看到它通过。
  2. 我的 NSURLConnection 代码完全绕过了代理。据我所知,它完全忽略了它。我接到 3 个代表电话:
    • willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -> 保护空间中连接挑战的主机是api.box.com(不是代理)
    • didReceiveResponse:(NSURLResponse *)response
    • didReceiveData:(NSData )数据
    • didFinishloading:(NSURLConnection) 连接

这些都运行得很好,从 api.box.com 获取他们的数据,但是当参考我的代理的访问日志时......这些调用都不是通过代理进行的......只有直接的。

我通过使用 wireshark 验证了这一点,我可以看到几乎所有来自我的 Mac 的连接都通过我的代理,但没有任何通过我的代码到 box.com 的连接。

我已将缓存策略设置为不在 squid 上缓存,并且使用的 NSURLMutableRequest 无济于事。

发生了什么事?我是否在某处遗漏了一些非常愚蠢的东西?

感谢任何帮助或您能想到的任何想法。

谢谢。

更新

所以关于 http 与 https 的评论让我很好奇,所以我尝试了一个随机 URL,它是 http 而不是 https,它通过代理就好了!!!

然后我更加注意了 squid 上的访问日志中发生了什么,我看到一些证书请求被拒绝:

1371072911.976      1 192.168.10.41 TCP_DENIED/407 3676 POST http://ocsp.digicert.com/ - HIER_NONE/- text/html
1371072911.991      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl3.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.101      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl3.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.199      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl4.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.209      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl4.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.219      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl3.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html
1371072912.230      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl3.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html
1371072912.240      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl4.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html
1371072912.347      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl4.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html

所以也许当我尝试连接到 https://api.box.com 时,它无法连接证书或其他什么?也许这实际上是一个 https / squid 问题而不是 NSURLConnection。

【问题讨论】:

  • 测试一下,你是在物理设备上运行,还是在模拟器中运行?
  • 绕过代理的 URL 是 HTTP 还是 HTTPS?
  • @jimbojw - 它在 OSX 上。这是一个 OSX 应用程序。我相信 api.box.com 的网址是 https。

标签: objective-c macos proxy nsurlconnection squid


【解决方案1】:

所以问题似乎实际上是 https 与 http 的问题。

我试图通过代理发送 https 请求,但代理仅设置为 http 代理。

解决方案?在代理设置中使用 https 代理 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2015-08-12
    • 2013-11-03
    相关资源
    最近更新 更多