2017-08-31 90 views
1

不會發生我寫的使用(超時= 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; 
} 
+0

看起來好像請求是在您的嘗試範圍之外聲明的。因此其他演員有可能改變超時時間嗎?也許嘗試在try範圍內聲明響應,看看它是如何發生的。 – SAm

+0

你有沒有考慮切換到更現代的HttpClient Api?您可以使用CancellationTokens以非常優雅的方式處理這些案例:https://msdn.microsoft.com/zh-CN/library/hh139115(v=vs.110).aspx –

+0

@SAm感謝您的建議。正如所建議的,我把httpwebrequest聲明放在一個try中。但是,問題仍然存在,但是謝謝 –

回答

0

諷刺與無效的網址https://ww.google.com測試期間您無意中絆倒了地雷。詳情請參閱this post。該帖子中提到的MSDN文檔是here。請注意,WebRequest.Create返回HttpWebRequest

基本上,這將需要一段時間,因爲url沒有映射到IP地址,因此不會被緩存在鏈中,每次向它發出請求時都需要進行完整的DNS查找。除非你在客戶端使用自己的DNS緩存層,否則你無能爲力,但坦率地說,它比它的價值更麻煩。