1. 程式人生 > 程式設計 >java httpclient設定超時時間和代理的方法

java httpclient設定超時時間和代理的方法

設定超時時間

設定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);
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。