(五)HttpClient 連接超時及讀取超時


第一節: HttpClient 連接超時及讀取超時

 

HttpClient連接超時及讀取超時

 

httpClient在執行具體http請求時候 有一個連接的時間和讀取內容的時間;

 

HttpClient連接時間

所謂連接的時候 是HttpClient發送請求的地方開始到連接上目標url主機地址的時間,理論上是距離越短越快,

線路越通暢越快,但是由於路由復雜交錯,往往連接上的時間都不固定,運氣不好連不上,HttpClient的默認連接時間,據我測試,

默認是1分鍾,假如超過1分鍾 過一會繼續嘗試連接,這樣會有一個問題 假如遇到一個url老是連不上,會影響其他線程的線程進去,說難聽點,

就是蹲着茅坑不拉屎。所以我們有必要進行特殊設置,比如設置10秒鍾 假如10秒鍾沒有連接上 我們就報錯,這樣我們就可以進行業務上的處理,

比如我們業務上控制 過會再連接試試看。並且這個特殊url寫到log4j日志里去。方便管理員查看。

 

HttpClient讀取時間

所謂讀取的時間 是HttpClient已經連接到了目標服務器,然后進行內容數據的獲取,一般情況 讀取數據都是很快速的,

但是假如讀取的數據量大,或者是目標服務器本身的問題(比如讀取數據庫速度慢,並發量大等等..)也會影響讀取時間。

同上,我們還是需要來特殊設置下,比如設置10秒鍾 假如10秒鍾還沒讀取完,就報錯,同上,我們可以業務上處理。

 

比如我們這里給個地址 http://central.maven.org/maven2/

 

這個是國外地址 連接時間比較長的,而且讀取的內容多 

很容易出現連接超時和讀取超時;

 

我們如何用代碼實現呢?

HttpClient給我們提供了一個RequestConfig類 專門用於配置參數比如連接時間,讀取時間以及前面講解的代理IP等。

 

這里給下示例代碼:

 1 package com.javaxk.httpclient.chap05;
 2 
 3 import org.apache.http.HttpEntity;
 4 import org.apache.http.HttpHost;
 5 import org.apache.http.client.config.RequestConfig;
 6 import org.apache.http.client.methods.CloseableHttpResponse;
 7 import org.apache.http.client.methods.HttpGet;
 8 import org.apache.http.impl.client.CloseableHttpClient;
 9 import org.apache.http.impl.client.HttpClients;
10 import org.apache.http.util.EntityUtils;
11 
12 public class Demo1 {
13     
14     public static void main(String[] args)throws Exception {
15         CloseableHttpClient httpClient=HttpClients.createDefault(); // 創建httpClient實例
16         HttpGet httpGet=new HttpGet("http://central.maven.org/maven2/"); // 創建httpget實例
17         RequestConfig config=RequestConfig.custom()
18                 .setConnectTimeout(5000)    // 設置連接超時時間 5秒鍾
19                 .setSocketTimeout(5000)        // 設置讀取超時時間5秒鍾
20                 .build();
21         httpGet.setConfig(config);
22         httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
23         CloseableHttpResponse response=httpClient.execute(httpGet); // 執行http get請求
24         HttpEntity entity=response.getEntity(); // 獲取返回實體
25         System.out.println("網頁內容:"+EntityUtils.toString(entity, "utf-8")); // 獲取網頁內容
26         response.close(); // response關閉
27         httpClient.close(); // httpClient關閉
28     }
29 
30 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM