設置鏈接超時和讀取超時方法:java
RequestConfig config=RequestConfig.custom() .setConnectTimeout(10000) // 設置鏈接超時時間 10秒鐘 .setSocketTimeout(10000) // 設置讀取超時時間10秒鐘 .build();
咱們先把鏈接時間設置爲10毫秒,並訪問一個香港地區的url,http://www.zhixuyuan.top數據庫
運行結果:apache
咱們再把讀取時間設置爲10毫秒,測試服務器
運行結果:併發
示例代碼:測試
import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class Demo { public static void main(String[] args) throws Exception { CloseableHttpClient closeableHttpClient=HttpClients.createDefault(); //一、建立實例 /* 訪問我在香港機房的網站首頁 */ HttpGet httpGet=new HttpGet("http://www.zhixuyuan.top"); //二、建立實例 HttpHost proxy=new HttpHost("114.219.61.82", 8118); RequestConfig config=RequestConfig.custom().setProxy(proxy) .setConnectTimeout(3000) // 設置鏈接超時時間 3秒鐘 .setSocketTimeout(10) // 設置讀取超時時間0.01秒鐘 .build(); httpGet.setConfig(config); CloseableHttpResponse closeableHttpResponse=closeableHttpClient.execute(httpGet); //三、執行 HttpEntity httpEntity=closeableHttpResponse.getEntity(); //四、獲取實體 //System.out.println(httpEntity.toString()); System.out.println(EntityUtils.toString(httpEntity, "utf-8")); //獲取網頁內容 closeableHttpResponse.close(); closeableHttpClient.close(); } }
HttpClient鏈接時間網站
所謂鏈接的時候ui
是HttpClient發送請求的地方開始到鏈接上目標url主機地址的時間,url
理論上是距離越短越快,線路越通暢越快,可是因爲路由複雜交錯,每每鏈接上的時間都不固定,運氣很差連不上,spa
HttpClient的默認鏈接時間,默承認能是1分鐘,假如超過1分鐘 過一會繼續嘗試鏈接,這樣會有一個問題 假如遇到一個url總是連不上,會影響其餘線程的線程進去,
因此咱們有必要進行特殊設置,好比設置10秒鐘 假如10秒鐘沒有鏈接上 咱們就報錯,這樣咱們就能夠進行業務上的處理,
好比咱們業務上控制 過會再鏈接試試看。而且這個特殊url寫到log4j日誌裏去。方便管理員查看。
HttpClient讀取時間
所謂讀取的時間 是HttpClient已經鏈接到了目標服務器,而後進行內容數據的獲取,通常狀況 讀取數據都是很快速的,
可是假如讀取的數據量大,或者是目標服務器自己的問題(好比讀取數據庫慢,併發量大等...)也會影響讀取時間。
咱們仍是須要來特殊設置下,好比設置10秒鐘 假如10秒鐘還沒讀取完,就報錯,同上,咱們能夠業務上處理。