连接池

如果每次请求都要创建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的请求参数相关推荐

  1. httpclient: 设置连接池及超时配置,请求数据:PoolingHttpClientConnectionManager

    public static void main(String[] args) throws Exception{//httpclient连接池//创建连接池PoolingHttpClientConne ...

  2. HttpClient以及连接池的使用

    1.HttpClient---不带参数的Get请求 package application;import org.apache.http.client.methods.CloseableHttpRes ...

  3. 问题备忘: httpclient连接池异常引发的惨案

    1. 问题描述 客户端A --> Ngnix --> 服务B Ngnix做服务B的负载,客户端访问服务B时,客户端偶尔会有抛出TimeoutException异常. 举个例子:如A在09: ...

  4. HttpClient连接池及重试机制

    (一)HttpClient 简介 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,基于标准 ...

  5. Http持久连接与HttpClient连接池

    以下文章来源方志朋的博客,回复"666"获面试宝典 一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp so ...

  6. Http 持久连接与 HttpClient 连接池

    转载自  Http 持久连接与 HttpClient 连接池 一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连 ...

  7. jedis连接池的maxIdle和maxtotal参数

    1.我们一般连接redis都需要用到连接池,最常用的就是jedis连接池,连接池中有两个参数的设置对高性能有较大影响:maxIdle和maxTotal 2.maxIdle的意思是连接池中空闲连接的最大 ...

  8. DBCP连接池常用参数详解

    DBCP连接池配置详解 连接池空闲连接数:连接池中存放的没有被使用的连接,使用getNumIdle()方法获取 连接池活动连接数:已经被程序借出,正在使用的连接数,当调用conn.close()方法后 ...

  9. 连接池:别让连接池帮了倒忙

    今天,我再与你说说另一种很重要的池化技术,即连接池. 我先和你说说连接池的结构.连接池一般对外提供获得连接.归还连接的接口给客户端使用,并暴露最小空闲连接数.最大连接数等可配置参数,在内部则实现连接建 ...

最新文章

  1. C# .net中json字符串和对象之间的转化方法
  2. asp.net控件本质
  3. 0322 第一天 心得体会
  4. VTK:图表之ColorVertexLabels
  5. synchronized锁的升级
  6. Object-C 类,对象,运行时,isa
  7. java后期发展方向_Java程序员的4个职业发展方向,该如何把握黄金5年?
  8. LeetCode 382. 链表随机节点(概率)
  9. python OCR 图形识别
  10. 基于Java+SpringBoot+vue+element实现新冠疫情物资管理系统详细设计
  11. 两边双虚线是什么意思_行星减速机生产厂家解析行星减速机双支撑与单支撑
  12. jsp主板 jtp_最新主板常见故障及解决(新)
  13. 安卓rom制作教程_刹那 刷机教程201三星S10 N10等系列 韩版国行安卓9升级10 详细步骤...
  14. win8怎么被远程计算机关闭,Win8系统局域网如何远程关机?Win8系统局域网远程关机的方法...
  15. matlab 频散曲线,Matlab绘制频散曲线程序代码
  16. 数学建模美赛写作技巧
  17. 现代计算机之父—冯·诺依曼
  18. 安卓MediaPlayer源码跟读解析
  19. 如何迁移outlook邮件到另一个硬盘_急!如何转移outlook本地邮件
  20. VBA调用Shell

热门文章

  1. C语言:一个数组中只有两个数字是出现一次
  2. iOS经典面试题总结--内存管理
  3. Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作...
  4. MySQL查询表内重复记录
  5. showModalDialog sesission丢失
  6. BZOJ 1036 [ZJOI2008]树的统计Count
  7. PowerEdge R730安装Windows server2008 R2操作系统
  8. linux常用的内核镜像格式
  9. WinCE中断结构分析
  10. Android关机流程源码分析