当前位置: 首页 > 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();

相关文章:

CloseableHttpClient详解

实现项目中的HttpUtil用到CloseableHttpClient&#xff0c;httpUtil源码&#xff1a;https://download.csdn.net/download/imwucx/88378340 于是学习CloseableHttpClient并记录一下。 一、CloseableHttpClient是什么&#xff1f; CloseableHttpClient实现了AutoCloseable接口和…...

从mysql 5.7 升级到 8.0 的一些注意事项

最近 mysql 5.7 版本将会终止安全更新&#xff0c;越来越多的朋友考虑升级 mysql 8.0&#xff0c;以下是一些刚开始使用时可能存在差异问题的地方&#xff0c;有一些其实在 mysql 5.7 版本里已经开始使用&#xff0c;这里整理一下方便查阅。 1、关于端口&#xff0c;该版本 My…...

喜迎中秋国庆双节,华为云Astro Canvas之我的中秋节设计大屏

目录 前言 前提条件 作品展示 薅羊毛 前言 大屏应用华为云Astro Canvas是华为云低代码平台Astro的子服务之一&#xff0c;是以数据可视化为核心&#xff0c;以屏幕轻松编排&#xff0c;多屏适配可视为基础&#xff0c;用户可通过图形化界面轻松搭建专业水准的数据可视化大屏…...

C++ stoi()函数的用法

stoi()函数的作用 将字符串转为相应进制&#xff0c;可以是8进制&#xff0c;10进制&#xff0c;16进制等&#xff0c;默认的情况下是10进制 stoi源码里面定义 stoi(const string& __str, size_t* __idx 0, int __base 10) 注意&#xff1a;idx 这个可能是版本的问题&…...

Learn Prompt- Midjourney案例:动漫设计

使用 Midjourney 生成动漫有两种方法&#xff1a;使用Niji模式或使用标准的 Midjourney 模型。Niji V5 是 Midjourney 的动漫专用模型。它建立在标准 Midjourney 模型的全新架构之上&#xff0c;更擅长生成命名的动漫角色。Niji V4于2023年12月发布&#xff0c;Niji V5于2023年…...

亚马逊无线鼠标FCC认证办理 FCC ID

无线鼠标是指无线缆直接连接到主机的鼠标&#xff0c;采用无线技术与计算机通信&#xff0c;从而省却电线的束缚。通常采用无线通信方式&#xff0c;包括蓝牙、Wi-Fi (IEEE 802.11)、Infrared (IrDA)、ZigBee (IEEE 802.15.4)等多个无线技术标准。随着人们对办公环境和操作便捷…...

MySQL常见数据类型、特点以及使用场景

以下是一些常见的MySQL数据类型及其特点&#xff0c;包括数据类型的占用字节数、最大存储值和适用场景&#xff1a; 1. 整数类型&#xff1a; TINYINT&#xff1a;1字节&#xff0c;范围从-128到127&#xff08;有符号&#xff09;&#xff0c;0到255&#xff08;无符号&…...

vue markdown显示为html

1、安装依赖markdown-it yarn add markdown-it 2、在页面中引用 import MarkdownIt from markdown-it3、实例化markdown-it const md new MarkdownIt()4、输出 <div class"answer" v-html"md.render(mdTxt)"></div>通过markdown-it可以将m…...

Spring整合RabbitMQ——生产者(利用配置类)

1.生产者配置步骤 2.引入依赖 3.编写配置 配置RabbitMQ的基本信息&#xff0c;用来创建连接工厂的 编写启动类 编写配置类 4. 编写测试类...

Linux基础工具|代码调试工具gdb的使用

1.debug/release gdb是一款Linux下的一款调试器&#xff0c;在没有图形化界面下&#xff0c;是一种不错的调试方案&#xff08;虽然在一般的开发环境中很少会使用gdb&#xff09; 不过要使用gdb&#xff0c;就先要了解debug和release版本。 发布软件的时候有一种叫debug版本…...

Ribbon负载均衡器

两种&#xff1a; 1.1 集中式负载均衡&#xff0c;服务端负载均衡 硬件 nginx 轮询、负载、哈希、随机、权重 为什么要做负载均衡&#xff1f; 1.2 客户端负载均衡器 用客户端 负载均衡器 很多机制可以自定义 小知识&#xff1a;不想让别人调自己&#xff0c;只想用别人的…...

初级软件测试入门教程

一、软件测试的基本概念 1、软件测试的定义 就是以发现错误为目的而运行程序的过程。 软件测试员的目标是找到软件缺陷&#xff0c;尽可能早一些&#xff0c;并确保其得以修复。 2、软件测试方法总体分类 试图验证软件是“工作的”&#xff08;所谓“工作的”就是指软件的…...

4项简化IT服务台任务的ChatGPT功能

近几个月&#xff0c;随着人工智能聊天机器人 ChatGPT 风靡全球&#xff0c;用户可以通过它生成脚本、文章、运动计划表等。同时&#xff0c;这项技术在各行各业都能够进行无穷无尽的应用&#xff0c;在本文中&#xff0c;我们将探讨这项现代技术如何帮助ITSM团队提升服务交付和…...

idea创建同级项目-纠结是SB

idea创建同级项目-纠结是SB 创建方法&#xff1a;...

任正非:天空足够大,世界会越来越兴盛

近日&#xff0c;华为公司创始人任正非与南开大学新闻与传播学院院长、科技日报原总编辑刘亚东今年7月7日在深圳一间咖啡厅的对话最新曝光。 在对话过程中&#xff0c;任正非以“拉法尔喷管”来描述华为的研发体系: “喇叭口”吸收宇宙能量&#xff0c;经过理论研究&#xff0…...

SMOKE-CMAQ实践技术应用

大气污染物排放是空气污染的源头&#xff0c;气象因素是影响污染程度的重要因素&#xff0c;因此空气质量模式要求气象资料和污染物排放清单作为输入&#xff0c;其中由于大气污染源复杂性、数据滞后性、动态变化、规律性不明显等特点&#xff0c;使得大气污染源排放清单输入准…...

电脑提示vcruntime140.dll缺失重新安装的修复方法

电脑出现 vcruntime140.dll 丢失的情况&#xff0c;通常是由于系统缺失了 Microsoft Visual C Redistributable 的运行库文件。这个文件是许多应用程序在运行时所需的依赖库&#xff0c;如果丢失了该文件&#xff0c;可能会导致某些软件无法正常运行。 下面是关于 vcruntime140…...

Vue实现Hello World

<div id"aa"> <p>{{h}}</p> </div> <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> <script> const hello new Vue({ el:#aa, data:{ h : Hello World } }) </script>...

Android---Bitmap 与 String 互转

1. Bitmap 转 String /*** 图片转字符串* param bitmap 要转换的图片* return 图片转换后的字符串*/public static String imageToBase64(Bitmap bitmap){ByteArrayOutputStream byteArrayOutputStream new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.J…...

python播放声音库playsound以及获取路径以及修改库源码

用python播放声音文件&#xff0c;使用了库playsound。 说一下本机环境&#xff1a;win10 64位&#xff0c;python3.10.4 &#xff0c;python2.7.13 最近一直用python3&#xff0c;所以首先进入python3的路径&#xff0c;运行pip3 install playsound 和pip3 install playsound2…...

山西电力市场日前价格预测【2023-09-27】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-27&#xff09;山西电力市场全天平均日前电价为342.48元/MWh。其中&#xff0c;最高日前电价为454.24元/MWh&#xff0c;预计出现在18: 30。最低日前电价为171.32元/MWh&#xff0c;预计…...

laravel框架 - 事件与监听器

一&#xff0c;绑定事件与监听器 在app\Providers下的EventServiceProvider.php中添加我们定义的事件与监听器 protected $listen [Registered::class > [SendEmailVerificationNotification::class,],App\ebvent\RegisterMessage>[//事件App\listeners\SendMessage//监…...

Android存储权限完美适配(Android11及以上适配)

一、Bug简述 一个很普通的需求&#xff0c;需要下载图片到本地&#xff0c;我的三个测试机&#xff08;荣耀Android10&#xff0c;红米 11 和小米Android 13都没有问题&#xff09;。 然后&#xff0c;主角登场了&#xff0c;测试的三星Android 13 死活拉不起存储权限弹窗。 …...

国产手机芯片4G方案_紫光展锐安卓核心板虎贲4G智能模块方案定制

元器件清单即BOM物料清单&#xff0c;不同行业领域的BOM表侧重点不一样。安卓主板的BOM表则侧重点在于元器件物料的清单&#xff0c;也就是安卓电路板的PCBA清单&#xff0c;精密的安卓板有上千个物料&#xff0c;可以帮助我们估算物料成本&#xff0c;建立生产计划&#xff0c…...

异步通讯技术之RabbitMQ

前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。 😇😇😇有兴趣的话关注博主一起学习,一起进步吧! 一、初识MQ …...

tcp/ip协议2实现的插图,数据结构

&#xff08;1&#xff09;以上是插图第2章和3章 的 mbuf 与 ifnet 与 ifaddr 与 le_softc 与 sockaddr_dl结构体 (2) 以下是 二章mbuf的宏和函数和三章函数下 &#xff08;3&#xff09; 以下是 三章接口层的宏和函数上 &#xff08;4&#xff09;4 四章1&#xff1a;以太网接…...

Redis学习 - 了解Redis(三)

1. 什么是缓存击穿、缓存穿透、缓存雪崩&#xff1f; 1.1 缓存穿透问题 先来看一个常见的缓存使用方式&#xff1a;读请求来了&#xff0c;先查下缓存&#xff0c;缓存有值命中&#xff0c;就直接返回&#xff1b;缓存没命中&#xff0c;就去查数据库&#xff0c;然后把数据库…...

API接口自动化测试框架

前言 接口自动化逐渐成为各大公司投入产出最高的测试技术。但是如何在版本迅速迭代过程中提高接口自动化的测试效率&#xff0c;仍然是大部分公司需要解决的问题。 框架定位 数据驱动设计模式&#xff0c;无需写测试代码脚本即可实现自动化等价类非等价类覆盖&#xff0c; E2E…...

MySQL学习笔记1

任务背景&#xff1a; 将原来的数据库从原来的MySQL-5.5 升级到现在的MySQL-5.7&#xff0c;并保证数据完整。 1&#xff09;不同版本MySQL的安装&#xff1b;yum glibc、源码安装&#xff0c;是企业100%要用到的。 2&#xff09;MySQL数据库版本升级&#xff1b;&#xff08…...

基于PYQT5的GUI开发系列教程【一】框架安装和基础环境配置

目录 本文概述 作者介绍 一、安装相关的库 二、在Pycharm上添加外部工具QtDesigner和PyGUI 三、测试QtDesigner和P有GUI 尾言 本文概述 PYQT5是一个基于python的可视化GUI开发框架&#xff0c;具有容易上手&#xff0c;界面美观&#xff0c;多平台部署等优点&#xff0c…...