不会发生我写的使用(超时= 2000)下面的代码HttpWebRequest和webproxy
下面的代码总是会抛出一个异常,因为错误的URL(“ww.google.com”)超时异常及时
当运行该程序,我得到2种例外的交替
1.远程服务器返回错误:(404)未找到(网页异常)
=>这需要小于2000毫秒捕获此异常
=>这个异常处理是正常的。
。
2.连接尝试失败,因为连接的方没有正确一段时间后响应或连接的主机未能响应(插座除外)
=>它需要25秒钟或更长时间,以赶上这个异常
=>我设置了一个请求2000ms超时但它不起作用!
我想捕捉异常,如果有是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范围内声明响应,看看它是如何发生的。 – SAm
你有没有考虑切换到更现代的HttpClient Api?您可以使用CancellationTokens以非常优雅的方式处理这些案例:https://msdn.microsoft.com/zh-CN/library/hh139115(v=vs.110).aspx –
@SAm感谢您的建议。正如所建议的,我把httpwebrequest声明放在一个try中。但是,问题仍然存在,但是谢谢 –