【发布时间】:2018-02-08 19:39:17
【问题描述】:
我使用 httpwebrequest(Timeout=2000) 和 webproxy 编写了以下代码
以下代码总是会因为错误的 url ("ww.google.com")
运行程序时,交替出现两种异常
1.远程服务器返回错误:(404) Not Found (Web Exception)
=> 捕获此异常只需不到 2000 毫秒
=> 这个异常处理是正常的。
.
2.连接尝试失败,因为连接方在一段时间后没有正确响应或连接的主机未能响应(套接字异常)
=>捕获此异常需要 25 秒或更长时间
=> 我设置了一个 2000 毫秒的请求超时,但它不起作用!!!!
如果2秒内没有响应,我想捕获异常
我该怎么办?
try
{
request = (HttpWebRequest)WebRequest.Create("https://ww.google.com");
request.Proxy = proxy;
request.Method = "GET";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36";
request.Timeout = 2000;
response = (HttpWebResponse)request.GetResponse();
if ((response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.Redirect))
{
StreamReader sreader = new StreamReader(response.GetResponseStream(), Encoding.Default);
gethtml = sreader.ReadToEnd();
sreader.Close();
}
}
catch (Exception ex)
{
throw ex;
}
【问题讨论】:
-
似乎请求在您的尝试范围之外声明。因此其他参与者有可能改变超时吗?也许尝试在 try 范围内声明响应,看看效果如何。
-
您是否考虑过切换到更现代的 HttpClient Api?您可以使用 CancellationTokens 以非常优雅的方式处理这些情况:msdn.microsoft.com/en-us/library/hh139115(v=vs.110).aspx
-
@SAm 感谢您的建议。正如建议的那样,我将 httpwebrequest 声明放在了 try 中。但是,问题仍然存在,但是谢谢
-
@CyprienAutexier 谢谢,我会按照你的建议去做。
标签: c# timeout httpwebrequest socketexception webproxy