設置連接超時和讀取超時方法:
RequestConfig config=RequestConfig.custom() .setConnectTimeout(10000) // 設置連接超時時間 10秒鍾 .setSocketTimeout(10000) // 設置讀取超時時間10秒鍾 .build();
我們先把連接時間設置為10毫秒,並訪問一個香港地區的url,http://www.zhixuyuan.top
運行結果:
我們再把讀取時間設置為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(); //1、創建實例 /* 訪問我在香港機房的網站首頁 */ HttpGet httpGet=new HttpGet("http://www.zhixuyuan.top"); //2、創建實例 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); //3、執行 HttpEntity httpEntity=closeableHttpResponse.getEntity(); //4、獲取實體 //System.out.println(httpEntity.toString()); System.out.println(EntityUtils.toString(httpEntity, "utf-8")); //獲取網頁內容 closeableHttpResponse.close(); closeableHttpClient.close(); } }
HttpClient連接時間
所謂連接的時候
是HttpClient發送請求的地方開始到連接上目標url主機地址的時間,
理論上是距離越短越快,線路越通暢越快,但是由於路由復雜交錯,往往連接上的時間都不固定,運氣不好連不上,
HttpClient的默認連接時間,默認可能是1分鍾,假如超過1分鍾 過一會繼續嘗試連接,這樣會有一個問題 假如遇到一個url老是連不上,會影響其他線程的線程進去,
所以我們有必要進行特殊設置,比如設置10秒鍾 假如10秒鍾沒有連接上 我們就報錯,這樣我們就可以進行業務上的處理,
比如我們業務上控制 過會再連接試試看。並且這個特殊url寫到log4j日志里去。方便管理員查看。
HttpClient讀取時間
所謂讀取的時間 是HttpClient已經連接到了目標服務器,然后進行內容數據的獲取,一般情況 讀取數據都是很快速的,
但是假如讀取的數據量大,或者是目標服務器本身的問題(比如讀取數據庫慢,並發量大等...)也會影響讀取時間。
我們還是需要來特殊設置下,比如設置10秒鍾 假如10秒鍾還沒讀取完,就報錯,同上,我們可以業務上處理。