检测 WebRequest 的 HTTP 代理错误

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
}
2个回答

3

这很棘手。以下是一些建议:

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

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


1

我认为你可以捕获 InvalidOperationException,然后检查消息中是否包含“proxy”。

消息会显示:

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


是的,检查特定关键字,比如“代理”或者异常信息中的实际代理地址是一种选择,但我正在寻找更加“确定性”的解决方案。 - AlexMinza
是的,这不是最好的方法,但它们会抛出一个InvalidOperationException异常,因此并没有提供给你太多信息! - David Kiff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接