2

好的,所以我读过的所有地方和我交谈过的每个人都说 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。

4

1 回答 1

1

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

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

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

于 2013-06-18T23:45:14.920 回答