5

如何檢測由於Web代理錯誤而導致WebRequest失敗而不是目標Web服務器錯誤?檢測WebRequest的HTTP代理錯誤

try 
{ 
    var request = (HttpWebRequest)WebRequest.Create("http://www.example.com"); 
    request.Proxy = new WebProxy("localhost"); 
    var response = request.GetResponse(); 

    return response.GetResponseStream(); 
} 
catch(WebException webex) 
{ 
    //Detect proxy failure 
} 

回答

3

這是困難的。以下是一些建議:

  • webex.Response.ResponseUri屬性包含代理服務器的URI而不是您嘗試聯繫的服務器。
  • ​​財產總是是指一個代理問題,例如, ProxyAuthenticationRequired。不幸的是,大多數狀態可能引用代理錯誤或服務器錯誤。
  • webex.Response.Headers集合包含您認爲由您的代理服務器生成的非標準條目。例如,Squid代理返回標題爲"X-Squid-Error"的自己的專有狀態。
  • webex.Response.ResponseStream流包含HTML或純文本錯誤消息,格式爲您識別爲由代理服務器生成的格式。您可能會測試以查看它是否包含代理服務器的URI。

在你的catch塊中,確保你記錄了WebException對象的全部細節,包括上面提到的所有屬性。然後,您可以分析日誌數據並開發代理錯誤的準確測試。

1

我想你可以捕獲InvalidOperationException,然後檢查消息「代理」。

消息會說:

代理名稱無法解析: 'localhost' 的

+0

是的,檢查特定關鍵字,例如「代理」或異常消息中的實際代理地址將是一種選擇,但我一直在尋找「更確定性」 – AlexMinza 2009-09-25 08:33:40

+0

是的,它不是最好的方法,但是他們拋出InvalidOperationException ,所以不要爲你提供很多! – 2009-09-25 10:08:47