5

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

2 回答 2

3

这很难。以下是一些建议:

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

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

于 2010-01-26T10:08:11.290 回答
1

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

消息会说:

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

于 2009-09-24T22:55:51.323 回答