检测WebRequest的HTTP代理错误

时间:2009-09-24 11:14:33

标签: c# proxy httpwebrequest httpwebresponse system.net.webexception

如何检测WebRequest因Web代理错误而非目标Web服务器错误而失败?

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
}

2 个答案:

答案 0 :(得分:3)

很难。以下是一些建议:

  • webex.Response.ResponseUri属性包含代理服务器的URI,而不是您尝试联系的服务器。
  • webex.Response.StatusCode属性是始终引用代理问题的属性,例如ProxyAuthenticationRequired。不幸的是,大多数状态可能是指代理错误或服务器错误。
  • webex.Response.Headers集合包含您认为由代理服务器生成的非标准条目。例如,Squid代理返回标题"X-Squid-Error",具有自己的一组状态。
  • webex.Response.ResponseStream流包含HTML或纯文本错误消息,其格式为您认为由代理服务器生成的格式。您可以测试它是否包含代理服务器的URI。

在catch块中,确保记录WebException对象的完整详细信息,包括上面提到的所有属性。然后,您可以分析日志数据并开发准确的代理错误测试。

答案 1 :(得分:1)

我认为您可以捕获InvalidOperationException,然后检查消息“proxy”。

该消息会说:

无法解析代理名称:'localhost'