2013-02-01 76 views
3

我花了一段時間搜索本網站上的文章,找到我正在嘗試完成的內容,但到目前爲止沒有運氣。我正在客戶端應用程序中執行Web請求,並且我想確保它通過代理工作。我將Fiddler2設置爲代理服務器進行測試,並迫使它需要身份驗證。.net通過代理網絡請求,自動檢測憑據

我已經基本上是想出如何讓代理使用:

Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy() 
    webService.Proxy = proxy 

我也試圖通過

webService.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials 

,並得到適當的憑據到代理加入這在配置部分下的app.config:

<system.net> 
     <defaultProxy useDefaultCredentials="true" /> 
    </system.net> 

這兩種情況我都得到相同的web異常:

The request failed with HTTP status 407: Proxy Auth Required. 

Fiddler2的代理有1名和1密碼,如果我把這些作爲憑證以編程方式請求,該請求將成功進行身份驗證。但是,是否有一個原因,即它沒有抓取來自IE的證書,就像抓取代理信息一樣?

Fiddler的代理是如何工作的例外?使用Windows身份驗證的普通代理是否可以正常使用我嘗試獲取憑據的方式,並且有任何方法可以輕鬆測試嗎?

+0

首先我想WebRequest使用IE代理是默認的。不是嗎?!你有沒有嘗試過,而沒有自己定義代理? (並在Internet選項中使用正確的代理設置) –

+0

是的,我也試過,並得到了相同的結果。我可以爲用戶添加一個表單,以便爲我輸入該信息,但對我而言,我可以通過編程方式獲得該信息。 –

回答

2

大多數,但不需要身份驗證使用當前用戶的Windows登錄憑據,所有代理。因此,使用DefaultCredentials通常是正確的。

話雖如此,它是一個代理,要求定製憑證可能(小提琴手要「1:1」,例如),這時有沒有辦法讓你的代碼才能真正知道這些憑據。您可能可能有一些運氣要求CredMan查看是否存在用於目標代理領域的存儲憑證,但這往往不起作用(假設它曾經這樣做)。您通常不能「詢問IE」憑據,因爲通常情況下,它不會持續存儲憑據;相反,它會根據會話的第一個請求提示用戶,並在會話的整個生命週期中將它們保存在內存中。

如果您希望軟件在具有此類代理的環境中運行,應該捕獲HTTP/407響應並提示用戶輸入其代理憑據,您可以在重試時手動添加該請求。

查看我的IEInternals博客文章討論此主題。