好吧,所以在我閱讀過的每個人以及我所談過的每個人都說NSURLConnection在異步模式下使用時應自動使用OSX的系統代理設置。NSURLConnection拒絕使用OSX系統代理設置
這裏是我做了什麼:
- 設置通過端口8080的另一臺主機與基本身份驗證在Squid代理。
- 在我的Mac上的系統代理設置中設置此代理。
- 安裝NSURLConnection代碼,用於處理異步通信所需的NSURLConnectionDelegate方法。我在所有委託方法(包括challengeAuthentication方法)中都有斷點。代碼嘗試連接的http地址是http://api.box.com地址。
結果:
- 我所有的OSX /蘋果機的流量的成功經歷我代理,我可以看到它通過Squid的訪問日誌會通。
- 我的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。
要測試,您是在物理設備上還是在模擬器上運行? – jimbojw
繞過代理HTTP或HTTPS的URL? – jimbojw
@jimbojw - 它在OSX上。這是一個OSX應用程序。我相信api.box.com網址是https。 – valheru