NSURLConnection拒绝使用OSX系统代理设置

时间:2013-06-12 01:06:49

标签: objective-c macos proxy nsurlconnection squid

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

这就是我所做的:

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

    1. 我的所有OSX / Mac机器的流量都成功通过我的代理,我可以通过squid的访问日志看到它。
    2. 我的NSURLConnection代码完全BYPASSES代理。它完全忽略了我所能说的。我得到3个代表电话:
      • willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)挑战 - >连接到挑战的保护空间中的主机是api.box.com(不是代理)
      • didReceiveResponse:(NSURLResponse *)回复
      • didReceiveData:(NSData )数据
      • didFinishloading:(NSURLConnection的)连接
    3. 这些都可以很好地从api.box.com获取数据,但是当提到我的代理的访问日志时....这些调用都不是通过代理进行的....只是直接。

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

      我已经将缓存策略设置为不缓存在squid和NSURLMutableRequest上都没有用。

      发生了什么事?我在某处或某处遗漏了一些明显愚蠢的东西吗?

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

      感谢。

      更新

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

      然后我更好地关注了鱿鱼访问日志的内容,我看到一些证书请求被拒绝了:

      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。

1 个答案:

答案 0 :(得分:1)

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

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

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