Dot-Net
System.Net.WebClient 與代理身份驗證 407 錯誤
我試圖弄清楚在使用 System.Net.WebClient 類時如何穩健地處理代理身份驗證錯誤(HTTP 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 仍然使用系統設置,這似乎是多餘的。
任何幫助表示讚賞。
如果代理身份驗證使用 BASIC 或 DIGEST,Internet Explorer 不會永久記憶體/重用代理身份驗證憑據。對於協商/NTLM,將提供預設憑據。
因此,即使 .NET 繼承自 IE 設置,除非您碰巧在 IE 中執行,否則您不會獲得對 Basic/Digest 代理身份驗證的任何“免費”支持;您需要提示使用者或提供配置螢幕。
Fiddler (www.fiddler2.com) 在“規則”菜單上有“請求代理身份驗證”選項,您可以使用它來模擬此場景以進行測試。