HttpClient4.5.2版本get/post請求設置連接/讀取超時時間 ?

1.問題如下:

前端有個加載提示框, 服務端進行Http請求獲取數據, 查詢慢等原因造成沒有響應, 使兩端都處於等待狀態, 用戶體驗感很差.
在這裏插入圖片描述

2.解決: ( 設置超時 )

使用RequestConfig對象, 由相應的Builder構建.

HttpGet httpget = new HttpGet(url);  
RequestConfig requestConfig = RequestConfig.custom()
	.setConnectTimeout(3000)   //連接超時. 
	.setConnectionRequestTimeout(3000)   //從連接池中獲取可用連接超時.
	.setSocketTimeout(3000)  //讀取超時.
	.build();  //構建RequestConfig對象. 
httpget.setConfig(requestConfig);  
HttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(httpget);
3.方法詳解. ( 參數: 單位(ms) )

1.setConnectTimeout:設置連接超時時間!
       指的是連接目標url的連接超時時間,即發送請求到與目標url建立起連接的最大時間。如果在該時間範圍內還沒有建立起連接,則就拋出connectionTimeOut異常。

Caused by: java.net.SocketTimeoutException: connect timed out

 
2.setSocketTimeout:設置請求獲取數據(響應)的超時時間.
       連接上一個url後,獲取response的返回等待時間 ,即在與目標url建立連接後,等待放回response的最大時間,在規定時間內沒有返回響應的話就拋出read time out。

Caused by: java.net.SocketTimeoutException: Read timed out 

 
3.setConnectionRequestTimeout:設置從connect Manager獲取Connection 超時時間.
       HttpClient中的要用連接時嘗試從連接池中獲取,若是在等待了一定的時間後還沒有獲取到可用連接(比如連接池中沒有空閒連接了) , 則會拋出獲取連接超時異常。
 

4.總結
因此使用HttpClient,一般都需要設置連接超時時間和獲取數據超時時間。這兩個參數很重要,目的是爲了防止訪問其他http時,由於超時導致自己的應用受影響。

可參考: https://blog.csdn.net/chyercn/article/details/97273357

發佈了107 篇原創文章 · 獲贊 172 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章