2013-06-12 41 views
2

好吧,所以在我閱讀過的每個人以及我所談過的每個人都說NSURLConnection在異步模式下使用時應自動使用OSX的系統代理設置。NSURLConnection拒絕使用OSX系統代理設置

這裏是我做了什麼:

  1. 設置通過端口8080的另一臺主機與基本身份驗證在Squid代理。
  2. 在我的Mac上的系統代理設置中設置此代理。
  3. 安裝NSURLConnection代碼,用於處理異步通信所需的NSURLConnectionDelegate方法。我在所有委託方法(包括challengeAuthentication方法)中都有斷點。代碼嘗試連接的http地址是http://api.box.com地址。

結果:

  1. 我所有的OSX /蘋果機的流量的成功經歷我代理,我可以看到它通過Squid的訪問日誌會通。
  2. 我的NSURLConnection代碼完全通過代理。它完全忽略了我所能說的。我得到3委託調用:
    • willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)的挑戰 - >連接到的挑戰,在保護空間的主機api.box.com(而不是代理)
    • didReceiveResponse:(NSURLResponse *)響應
    • didReceiveData:(NSData的)數據
    • didFinishloading:(NSURLConnection的)連接

這些全部運行得很好從api.box.com獲取他們的數據,但是當提到我的代理的訪問日誌....這些調用都沒有通過代理....只有直接。

我使用wireshark驗證了這一點,我可以通過我的代碼在這裏看到幾乎所有來自我的Mac的連接,通過我的代理,但沒有任何連接到box.com。

我已經設置緩存策略不緩存兩個魷魚和NSURLMutableRequest正在使用無濟於事。

這是怎麼回事?我在某處丟失了一些明顯愚蠢的東西嗎?

感謝您能想到的任何幫助或任何想法。

謝謝。

UPDATE

所以有關http和https的評論讓我很好奇,所以我嘗試這是HTTP,而不是HTTPS隨機URL和它去通代理就好了!

然後我付了一些更好的關注發生了什麼事情,通過對魷魚的訪問日誌,我看到了一些證書請求被拒絕:

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。

+0

要測試,您是在物理設備上還是在模擬器上運行? – jimbojw

+0

繞過代理HTTP或HTTPS的URL? – jimbojw

+0

@jimbojw - 它在OSX上。這是一個OSX應用程序。我相信api.box.com網址是https。 – valheru

回答

1

所以這個問題似乎實際上是一個HTTPS與HTTP問題。

我試圖通過代理髮送https請求,但代理只設置爲http代理。

解決方案?在代理設置中使用https代理;)