HttpClient的连接池||HttpClient的请求参数
生活随笔
收集整理的這篇文章主要介紹了
HttpClient的连接池||HttpClient的请求参数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
連接池
如果每次請求都要創建HttpClient,會有頻繁創建和銷毀的問題,可以使用連接池來解決這個問題
HttpClientPoolTest.java
package cn.itcast.crawler.test;import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils;import java.io.IOException;public class HttpClientPoolTest {public static void main(String[] args) {//創建連接池管理器PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();//設置最大連接數cm.setMaxTotal(100);//設置每個主機的最大連接數cm.setDefaultMaxPerRoute(10);//使用連接池管理器發起請求doGet(cm);doGet(cm);}private static void doGet(PoolingHttpClientConnectionManager cm) {//不是每次創建新的HttpClient,而是從連接池中獲取HttpClient對象CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();HttpGet httpGet = new HttpGet("http://www.itcast.cn");CloseableHttpResponse response = null;try {response = httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() == 200) {String content = EntityUtils.toString(response.getEntity(), "utf8");System.out.println(content.length());}} catch (IOException e) {e.printStackTrace();}finally {if (response != null) {try {response.close();} catch (IOException e) {e.printStackTrace();}//不能關閉HttpClient,由連接池管理HttpClient//httpClient.close();}}} }HttpClient的請求參數
有時候因為網絡,或者目標服務器的原因,請求需要更長的時間才能完成,我們需要自定義相關時間
HttpConfigTest.java
package cn.itcast.crawler.test;import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils;import java.io.IOException;public class HttpConfigTest {public static void main(String[] args) {//創建HttpClient對象CloseableHttpClient httpClient = HttpClients.createDefault();//創建HttpGet對象,設置url訪問地址HttpGet httpGet = new HttpGet("http://www.itcast.cn");//配置請求信息RequestConfig config = RequestConfig.custom().setConnectTimeout(1000) //創建連接的最長時間,單位是毫秒.setConnectionRequestTimeout(500) //設置獲取連接的最長時間,單位是毫秒.setSocketTimeout(10*1000) //設置數據傳輸的最長時間,單位是毫秒.build();//給請求設置請求信息httpGet.setConfig(config);CloseableHttpResponse response = null;try {//使用HttpClient發起請求,獲取responseresponse = httpClient.execute(httpGet);//解析響應if (response.getStatusLine().getStatusCode() == 200) {String content = EntityUtils.toString(response.getEntity(), "utf8");System.out.println(content.length());}} catch (IOException e) {e.printStackTrace();}finally {//關閉responsetry {response.close();} catch (IOException e) {e.printStackTrace();}try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}} }?
總結
以上是生活随笔為你收集整理的HttpClient的连接池||HttpClient的请求参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POST请求||带参数的POST请求
- 下一篇: Jsoup介绍||jsou