天天看點

java httpclient通過RequestConfig設定http請求響應時間

調用HTTP接口時,設定請求逾時時間,通過RequestConfig設定。

檢視源碼,

// -1:永不逾時

private int connectionRequestTimeout = -1;

private int connectTimeout = -1;

private int socketTimeout = -1;

Builder(org.apache.http.client.config.RequestConfig.Builder)

是RequestConfig(org.apache.http.client.config.RequestConfig)

的内部類,專門用于建立RequestConfig

複制代碼

HttpPost httpPost = new HttpPost(reqURL)

Builder customReqConf = RequestConfig.custom();

customReqConf.setConnectTimeout(2000);

customReqConf.setSocketTimeout(2000);

customReqConf.setConnectionRequestTimeout(3000);

httpPost.setConfig(customReqConf.build());

複制代碼

HttpClient内部有三個逾時時間設定:連接配接池擷取可用連接配接逾時,連接配接逾時,讀取資料逾時

1.從連接配接池中擷取可用連接配接逾時

HttpClient中的要用連接配接時嘗試從連接配接池中擷取,若是在等待了一定的時間後還沒有擷取到可用連接配接(比如連接配接池中沒有空閑連接配接了)則會抛出擷取連接配接逾時異常。

2.連接配接目标逾時connectionTimeout

指的是連接配接目标url的連接配接逾時時間,即客服端發送請求到與目标url建立起連接配接的最大時間。如果在該時間範圍内還沒有建立起連接配接,則就抛出connectionTimeOut異常。

如測試的時候,将url改為一個不存在的url:“http://test.com” ,逾時時間3000ms過後,系統報出異常: org.apache.commons.httpclient.ConnectTimeoutException:The host did not accept the connection within timeout of 3000 ms

3.等待響應逾時(讀取資料逾時)socketTimeout

連接配接上一個url後,擷取response的傳回等待時間 ,即在與目标url建立連接配接後,等待放回response的最大時間,在規定時間内沒有傳回響應的話就抛出SocketTimeout。

測試時,将socketTimeout 設定很短,會報等待響應逾時。