【问题标题】:Detect HTTP Proxy error for WebRequest检测 WebRequest 的 HTTP 代理错误
【发布时间】:2009-09-24 11:14:33
【问题描述】:

如何检测 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
}

【问题讨论】:

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


    【解决方案1】:

    很难。以下是一些建议:

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

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

    【讨论】:

      【解决方案2】:

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

      消息会说:

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

      【讨论】:

      • 是的,在异常消息中检查特定关键字,如“代理”或实际代理地址是一种选择,但我正在寻找“更具确定性”的东西
      • 是的,这不是最好的方法,但是它们会抛出 InvalidOperationException,因此不会为您提供太多!
      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 2015-08-02
      • 2011-05-14
      • 1970-01-01
      • 2012-02-15
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多