c# - 检测 WebRequest 的 HTTP 代理错误

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

如何检测 WebRequest 由于网络代理错误而非目标网络服务器错误而失败?

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 代理返回 header “X-Squid-Error”,以及它自己专有的一组状态。
  • webex.Response.ResponseStream 流包含 HTML 或纯文本错误消息,其格式可识别为由代理服务器生成。您可以测试它是否包含您的代理服务器的 URI。

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

关于c# - 检测 WebRequest 的 HTTP 代理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471026/

相关文章:

c# - 我是否使用了错误的设置/获取功能?

c# - HttpClient、Azure 和 System.Net.Sockets.SocketException : what to do?

c# - 如何检索中继器内表列(ID)的TD值

http - Scrapy 使用随机代理池以避免被禁止

ASP.NET 在请求期间存储上下文数据

c# - xml解析错误: hexadecimal value is an invalid character

C# 调用返回指针的 C++ 方法。解释内存管理

spring - 按类代理与按接口(interface)代理 (Spring) 相比有什么好处?

proxy - Nginx proxy_pass 到受密码保护的上游

C#:如何通过 WebRequest 发布大字符串?