1. 程式人生 > >httpclient4.5以上設定連線超時的…

httpclient4.5以上設定連線超時的…

public static JSONObject httpGet(String url, Map getrequesttMap, boolean noNeedResponse) {
//post請求返回結果
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet method =new HttpGet(url);

RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000).setConnectionRequestTimeout(

1000)
.setSocketTimeout(5000).build();

//setConnectTimeout:設定連線超時時間,單位毫秒。

//setConnectionRequestTimeout:設定從connect Manager獲取Connection 超時時間,單位毫秒。這個屬性是新加的屬性,因為目前版本是可以共享連線池的。

//setSocketTimeout:請求獲取資料的超時時間,單位毫秒。 如果訪問一個介面,多少時間內無法返回資料,就直接放棄此次呼叫。

method.setConfig(requestConfig);
try {
if (null != getrequesttMap) {
//解決中文亂碼問題

List params = new ArrayList();
for (String key : getrequesttMap.keySet()) {
params.add(new BasicNameValuePair(key, getrequesttMap.get(key)));
}
method.setParams((HttpParams) new UrlEncodedFormEntity(params, "UTF-8"));
//method.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
}
HttpResponse result = httpClient.execute(method);

url = URLDecoder.decode(url, "UTF-8");

return buildResult(url, result, noNeedResponse);
} catch (IOException e) {
logger.error("通訊異常:" + url, e);
}
return null;
}