2011-09-02 96 views
4

恐怕這個答案是否定的,但我希望有人能夠提供一個明確的答案,因爲它沒有在當前的iOS SDK文檔中記錄。SCNetworkReachability是否尊重HTTP代理設置?

我們看到NSURLConnection能夠通過HTTP代理連接到https://mysite.com的情況,但由於在這種情況下設置了本地DNS,所以mysite.com的DNS查找將失敗。在這種情況下,看起來SCNetworkReachability試圖爲mysite.com執行DNS查找並失敗。同時,NSURLConnection可以連接。

我們已將Apple Reachability示例代碼合併到我們的應用程序中,並正在使用mysite.com調用SCNetworkReachabilityCreateWithName。

回答

2

我不能提供明確的答案,但我可以提供更多的經驗證據和一些理由,答案是否定的。我有一個應用程序使用SCNetworkReachabilityGetFlags來檢查特定主機是否可訪問(例如:www.mysite.com)。根據可達性檢查,然後使用[NSMutableData dataWithContentsOfURL:]下載數據。

該應用程序一直運行良好,但最近我一直在做一些編碼工作,其中網絡訪問是通過企業HTTP代理。在iOS Simulator(使用我的Mac上配置的代理設置)中運行應用程序時,可達性檢查失敗。起初我以爲iOS模擬器可能沒有使用Mac的代理設置,但模擬器中的Mobile Safari運行良好。所以我刪除了我的應用程序中的可達性檢查,並呼籲[NSMutableData dataWithContentsOfURL:]工作正常。這似乎表明SCNetworkReachability不尊重代理設置。

考慮到這一點,如果您將SCNetworkReachability視爲在TCP/IP級別運行,而不是在HTTP級別運行,則與公司防火牆後面的Mac/PC上的ping google.com運行方式相同也不行。 HTTP代理(顧名思義)是用於HTTP協議,而不是整個TCP/IP協議棧。

在閱讀this question on Reachability的答案後,我傾向於將我的可達性檢查完全刪除。儘管到目前爲止它只是模擬器中的一個問題,但在其他情況下(例如需要驗證的公共WiFi熱點)可能會有問題。