当前位置: 首页 > news >正文

CloseableHttpClient详解

实现项目中的HttpUtil用到CloseableHttpClient,httpUtil源码:https://download.csdn.net/download/imwucx/88378340

于是学习CloseableHttpClient并记录一下。

一、CloseableHttpClient是什么?

CloseableHttpClient实现了AutoCloseable接口和HttpClient接口,可以自动关闭连接管理器和销毁HttpClient实例。不仅可以简单设置请求头,还可以利用fastjson转换请求或返回结果字符串为json格式。

二、CloseableHttpClient优点

  • 实现了HttpClient接口,具有HttpClient的优势。
  • 支持连接池管理,即可复用已建立的连接。
  • 自动管理连接释放。
  • 支持GZIP解压。
  • 支持HTTPS访问。
  • 支持通用连接超时设置。
  • 性能更优。

三、CloseableHttpClient使用

1、创建CloseableHttpClient实例

HttpClients.createDefault()

2、创建请求实例

HttpPost post = new HttpPost(url);

3、设置请求参数

    StringEntity s = new StringEntity(json.toString());s.setContentEncoding("UTF-8");s.setContentType("application/json");post.setEntity(s);

4、执行请求

HttpResponse res = httpClient.execute(post);

5、处理返回结果

    if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {HttpEntity entity = res.getEntity();String result = EntityUtils.toString(entity, "UTF-8");respJson = JSONObject.parseObject(result);}

6、连接池

使用连接池来提高性能

Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTANCE).register("https", createSSLConnSocketFactory()).build();// 设置连接池PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry);// 设置连接池大小connMgr.setMaxTotal(100);connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(connMgr).build();

7、关闭连接池

httpClient.close();

在应用程序结束时,应关闭连接管理器以释放所有的系统资源。

四、高级用法

  • 请求超时时间
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTANCE).register("https", createSSLConnSocketFactory()).build();// 设置连接池PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry);// 设置连接池大小connMgr.setMaxTotal(100);connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());RequestConfig.Builder configBuilder = RequestConfig.custom();// 设置连接超时configBuilder.setConnectTimeout(MAX_TIMEOUT);// 设置读取超时configBuilder.setSocketTimeout(MAX_TIMEOUT);// 设置从连接池获取连接实例的超时configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);// 在提交请求之前 测试连接是否可用configBuilder.setStaleConnectionCheckEnabled(true);requestConfig = configBuilder.build();CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
  • 设置代理
HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http");
RequestConfig config = RequestConfig.custom().setProxy(proxy).build();HttpGet httpGet = new HttpGet("http://www.example.com");
httpGet.setConfig(config);
  • 设置cookie
CloseableHttpClient httpClient = HttpClients.createDefault();
CookieStore cookieStore = new BasicCookieStore();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
  • 设置异常重试

CloseableHttpClient httpClient = HttpClients.custom().setRetryHandler(new DefaultHttpRequestRetryHandler(3, true)).build();

http://www.lryc.cn/news/176420.html

相关文章:

  • 从mysql 5.7 升级到 8.0 的一些注意事项
  • 喜迎中秋国庆双节,华为云Astro Canvas之我的中秋节设计大屏
  • C++ stoi()函数的用法
  • Learn Prompt- Midjourney案例:动漫设计
  • 亚马逊无线鼠标FCC认证办理 FCC ID
  • MySQL常见数据类型、特点以及使用场景
  • vue markdown显示为html
  • Spring整合RabbitMQ——生产者(利用配置类)
  • Linux基础工具|代码调试工具gdb的使用
  • Ribbon负载均衡器
  • 初级软件测试入门教程
  • 4项简化IT服务台任务的ChatGPT功能
  • idea创建同级项目-纠结是SB
  • 任正非:天空足够大,世界会越来越兴盛
  • SMOKE-CMAQ实践技术应用
  • 电脑提示vcruntime140.dll缺失重新安装的修复方法
  • Vue实现Hello World
  • Android---Bitmap 与 String 互转
  • python播放声音库playsound以及获取路径以及修改库源码
  • 山西电力市场日前价格预测【2023-09-27】
  • laravel框架 - 事件与监听器
  • Android存储权限完美适配(Android11及以上适配)
  • 国产手机芯片4G方案_紫光展锐安卓核心板虎贲4G智能模块方案定制
  • 异步通讯技术之RabbitMQ
  • tcp/ip协议2实现的插图,数据结构
  • Redis学习 - 了解Redis(三)
  • API接口自动化测试框架
  • MySQL学习笔记1
  • 基于PYQT5的GUI开发系列教程【一】框架安装和基础环境配置
  • 【漏洞复现】Jeecg-Boot SQL注入漏洞(CVE-2023-34659)