2011-01-27 39 views
0

我有一個應用程序,使用NSURLConnection與Web服務器進行通信。如果我啓用了「自動代理配置」設置,並且該設置中的URL指向了不可用的服務器,則我的NSURLConnection嘗試將失敗,並顯示超時錯誤。如果我再次發出請求,NSURLConnection將嘗試直接連接(必須注意代理失敗)並且請求成功。NSURLConnection自動直接連接,如果proxy.pac下載失敗

我注意到,Safari會嘗試直接連接一旦代理超時,但它會自動執行此操作。我下載了最新的WebKit夜間來源,構建它並試圖弄清楚這是如何完成的。對於我的生活,我無法弄清楚WebKit如何獲得這種行爲。它創建一個NSURLConnection,但是 - 連接:didFailWithError:永遠不會被調用。代理超時之後,-connection:didReceiveResponse:delegate被調用,因爲它直接連接。我可以看到,WebKit代碼中沒有任何內容檢測到此代理超時並強制重新加載。這必須發生在NSURLConnection/NSURLRequest中。

如何讓NSURLConnection在代理失敗時自動重試直接連接?我希望它能像Safari/WebKit中那樣工作。

回答

0

我想通了。它必須處理請求超時間隔。 NSURLRequest的默認超時間隔是60秒。最初的代理服務器超時需要將近90秒才能發生,因此NSURLConnection不會回退到直接連接。一旦我增加了請求中的超時時間,它就開始工作。