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",443,"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);
}

 


免責聲明!

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



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