java httpclient設定超時時間和代理的方法
阿新 • • 發佈:2020-02-11
設定超時時間
設定HttpClient的超時時間,非常有必要性,因為httpclient 預設超時時間很長,自己可以測試一下是多久,設定超時時間否則會影響自己系統的業務邏輯,例如阻塞系統,影響系統的吞吐量,佔用執行緒數。
httpclient 4.4版本之後將這些設定封裝到 RequestConfig 物件裡,其中 setConnectTimeout 是設定連線到目標 URL 的等待時長,超過這個時間還沒連上就丟擲連線超時;
setConnectionRequestTimeout 是從connect Manager(連線池)獲取連線的等待時長,這個版本是共享連線池的;
setSocketTimeout 是連線到目標URL 之後等待返回響應的時長,即超過這個時間就放棄本次呼叫並丟擲
SocketTimeoutException:Read Time Out public static RequestConfig getRequestConfig(){ RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(10000) .setSocketTimeout(10000) .setConnectionRequestTimeout(6000) .build(); return requestConfig; }
設定代理
有時候我們線上訪問外部第三方的介面的時候,不想暴露真實機器的IP,或者我們的機器不能訪問外網的時候,我們可以通過代理伺服器來訪問,代理伺服器充當內網與外網連結的中間人。
httpclient 4.4後設置代理的 IP、埠被封裝到 RequestConfig 物件裡,通過 HttpHost 物件封裝代理的 IP、埠和協議。
這裡需要注意的一點是,如果你的目標 URL 是 HTTP 協議的,那麼你的代理也應該是 HTTP 協議的,如下 HttpHost 的構造方法可以指定代理服務的協議,不傳預設為 HTTP。
public static RequestConfig getRequestConfig(){ HttpHost proxy = new HttpHost("代理ip",8080,"HTTP");//代理 RequestConfig requestConfig = RequestConfig.custom() .setProxy(proxy) .setConnectTimeout(10000) .setSocketTimeout(10000) .setConnectionRequestTimeout(6000) .build(); return requestConfig; }
然後通過 HttpPost 或 HttpGet 的setConfig()方法使其應用到該 config。
HttpPost httpPost = new HttpPost(url); if(null != requestConfig){ httpPost.setConfig(requestConfig); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。