如何检测 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
}
有帮助吗?

解决方案

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

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

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

其他提示

我想你能赶上InvalidOperationException异常,然后检查消息“代理”。

该消息会说:

代理名称不能被解决:“本地主机”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top