httpclient設置超時時間和代理

設置超時時間

設置HttpClient的超時時間,很是有必要性,由於httpclient 默認超時時間很長,本身能夠測試一下是多久,設置超時時間不然會影響本身系統的業務邏輯,例如阻塞系統,影響系統的吞吐量,佔用線程數。java

httpclient 4.4版本以後將這些設置封裝到 RequestConfig 對象裏,其中 setConnectTimeout 是設置鏈接到目標 URL 的等待時長,超過這個時間還沒連上就拋出鏈接超時;服務器

setConnectionRequestTimeout 是從connect Manager(鏈接池)獲取鏈接的等待時長,這個版本是共享鏈接池的;測試

setSocketTimeout 是鏈接到目標URL 以後等待返回響應的時長,即超過這個時間就放棄本次調用並拋出 SocketTimeoutException:Read Time Outui

public static RequestConfig getRequestConfig(){
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(10000)
                .setSocketTimeout(10000)
                .setConnectionRequestTimeout(6000)
                .build(); return requestConfig;
    }

設置代理

有時候咱們線上訪問外部第三方的接口的時候,不想暴露真實機器的IP,或者咱們的機器不能訪問外網的時候,咱們能夠經過代理服務器來訪問,代理服務器充當內網與外網連接的中間人。url

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。code

HttpPost httpPost = new HttpPost(url); if(null != requestConfig){
    httpPost.setConfig(requestConfig);
}
相關文章
相關標籤/搜索