我使用httpwebrequest(Timeout = 2000)和webproxy
编写了以下代码
由于网址错误,以下代码始终会引发异常(“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;
}
答案 0 :(得分:0)
讽刺的是,在使用无效网址https://ww.google.com
进行测试时,您无意中绊倒了一个地雷。有关详细信息,请参阅this post。该帖子中提到的MSDN文档是here。请注意,WebRequest.Create
会返回HttpWebRequest
。
基本上,它需要一段时间,因为网址没有映射到IP地址,因此不会被缓存在链中,每次向它发出请求时都需要完整的DNS查找。除非您在客户端使用自己的DNS缓存层,否则您无法对此做任何事情,但坦率地说它比它的价值更麻烦。