我想弄清楚如何在使用System.Net.WebClient類時穩健地處理代理驗證錯誤(HTTP 407狀態碼)。System.Net.WebClient與代理驗證407錯誤
在該字段中,我們看到許多用戶接收到407代理身份驗證 WebException,但我不確定什麼是良好的默認策略。在.Net 2.0/3.5中,代理驗證設置應該從Internet Explorer系統設置的 繼承。 Firefox,Opera和Chrome使用這些 相同的設置。
下面是我們使用的基本代碼:
using System.Net;
string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);
當此代碼失敗,我們打開用戶的瀏覽器,並將它們發送到幫助 頁面。從我們的網絡日誌中,我們知道這些客戶可以在其瀏覽器中成功連接 。也許他們在他們到達我們的幫助頁面之前手動輸入他們的代理用戶名和密碼 ?我們不知道。
看來我們可以使用WebClient.UseDefaultCredentials,但是如果WebClient使用系統設置,這個 似乎是多餘的。
任何幫助表示讚賞。
謝謝埃裏克。小提琴奏效。 澄清,對於Negotiate/NTML,無論是否設置UseDefaultCredentials = true,WebClient都將提供默認憑據?換句話說,在處理407 WebException並使用UseDefaultCredentials = true重試時是否有價值?爲什麼不總是設置UseDefaultCredentials = true?安全風險? 意見聲明:WinInet似乎處理得更好。鑑於宇宙中的每個人都想要遍歷代理,爲什麼不自動執行此操作或者觸發事件並提供用於輸入/保存證書的標準UI? – Daniel 2009-07-31 20:32:46
我使用Fiddler進行了更多實驗。我認爲只要提供像下面這樣的用戶名和密碼(「1」,「1」)很容易,但它不起作用。 string url =「http://www.java.com/」; webClient = new WebClient(); CredentialCache cache = new CredentialCache(); cache.Add(new Uri(url),「Basic」,new NetworkCredential(「1」,「1」)); webClient.Proxy.Credentials = credentialCache; webClient.Credentials = credentialCache; string contents = webClient.DownloadString(url); – Daniel 2009-07-31 23:47:32
得到它的工作。由於某種原因,CredentialCache不起作用。我必須將NetworkCredential傳遞給webClient.Proxy.Credentials。 – Daniel 2009-08-01 00:02:34