org.apache.http.client.HttpClient; HttpClient 4.3超時設置


可用的code

import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;



public static String doPost(String url, String params, String contentType) /*throws IOException */{ CloseableHttpClient client = HttpClients.createDefault(); RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(httpSoTimeout).setConnectTimeout(connectionTimeout).build();//設置請求和傳輸超時時間 String strResult = null; try { HttpPost post = new HttpPost(url); post.setConfig(requestConfig); if (StringUtils.isNotBlank(contentType)) { post.setHeader("Content-Type", contentType); } StringEntity se = new StringEntity(params); post.setEntity(se); HttpResponse response = client.execute(post); if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK && response.getEntity() != null){ HttpEntity entity = response.getEntity(); strResult = EntityUtils.toString(entity, "utf-8"); EntityUtils.consume(entity); } } catch (Exception e) { log.error("http post error:{} ", e.getMessage()); return null; } return strResult; } }

 

 

 

 

 

最近用到了HttpClient寫爬蟲,可能我有新版本強迫症,老是喜歡用新版本的東西(雖說新版本不一定好用),然后就用了HttpClient 4.3。HttpClient這貨和Lucene一樣,每個版本的API都變化很大,這有點讓人頭疼。就好比創建一個HttpClient對象吧,每一個版本的都不一樣,

3.X是這樣的

HttpClient httpClient=new DefaultHttpClient();

4.3是這樣的

CloseableHttpClient httpClient = HttpClients.createDefault();

當然,上面這些變化只不過是一些小變化,大家看看API大家就都會了。

我要講的是超時設置,HttpClient有三種超時設置,最近比較忙,沒時間具體歸納總結,以后再補上,我這里就講一些最簡單最易用的超時設置方法。

這是個3.X的超時設置方法

HttpClient client = new HttpClient(); client.setConnectionTimeout(30000); client.setTimeout(30000);
HttpClient httpClient= new HttpClient(); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);

4.X版本的超時設置(4.3后已過時)

HttpClient httpClient=new DefaultHttpClient(); httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,2000);//連接時間 httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,2000);//數據傳輸時間

4.3版本超時設置

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet=new HttpGet("http://www.baidu.com");//HTTP Get請求(POST雷同) RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();//設置請求和傳輸超時時間 httpGet.setConfig(requestConfig); httpClient.execute(httpGet);//執行請求

BTW,4.3版本不設置超時的話,一旦服務器沒有響應,等待時間N久(>24小時)。


免責聲明!

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



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