HttpUtils工具类(一)常见的HttpUtils工具类及如何自定义java的http连接池
目录
一、几种常见的Http调用方式
1. 使用 Apache HttpClient
2. 使用 OKhttpClient
3. 使用第三方库(Hutool)的http链接池
4. 使用 Spring RestTemplate
5. 使用 Java 原生的HttpURLConnection
二、总结
常用三种HttpUtils对比总结
一、几种常见的Http调用方式
- Apache HttpClient
- OKhttpClient
- Hutool封装的HttpUtils
- Spring RestTemplate
- Java 原生的HttpURLConnection
1. 使用 Apache HttpClient
Apache HttpClient 是一个功能强大的 HTTP 客户端库,支持同步和异步请求。它适用于处理更加复杂的场景,如认证、连接池、多线程、上传文件等。
特点:
- 功能强大:Apache HttpClient 是一个久经考验的库,支持多种复杂的场景,包括连接池、代理、认证、重定向、Cookie 管理等。
- 扩展性好:可以通过丰富的 API 进行灵活配置,满足复杂的企业级应用需求。
- 同步阻塞:Apache HttpClient 默认是同步阻塞模式,适用于同步请求。
优点:
- 成熟稳定,经过长时间的验证,企业级项目中广泛使用。
- 适合需要复杂 HTTP 操作的场景,如带有重试、认证和状态维护的请求。
缺点:
- 比较重量级,学习曲线稍陡峭。
maven依赖:
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>
2. 使用 OKhttpClient
官网(概述 - OkHttp (square.github.io))
OKhttpClient是一个轻量级且性能出色的 HTTP 客户端,支持同步和异步请求,广泛应用于 Android 开发中。
特点:
- 轻量级且高效:OkHttpClient 是由 Square 开发的轻量级 HTTP 客户端库,广泛用于 Android 开发中。
- 同步与异步请求:支持同步阻塞和异步非阻塞请求,异步操作非常简单且性能良好。
- 连接复用:内置连接池,减少重复连接带来的开销,尤其适合在 Android 和 Web 应用中使用。
优点:
- 性能优异,尤其适合移动端和需要高并发的场景。
- API 简单易用,支持异步调用,非常适合需要频繁发起网络请求的应用场景。
缺点:
- 功能相对较少,某些复杂功能需要自定义扩展。
maven依赖:
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.0</version>
</dependency>
3. 使用第三方库(Hutool)的http链接池
官网(Http客户端工具类-HttpUtil (hutool.cn))
Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单。
Hutool-http的核心集中在两个类:
- HttpRequest
- HttpResponse
同时针对大部分情境,封装了HttpUtil工具类。
优点:
- 根据URL自动判断是请求HTTP还是HTTPS,不需要单独写多余的代码。
- 表单数据中有File对象时自动转为
multipart/form-data表单,不必单做做操作。 - 默认情况下Cookie自动记录,比如可以实现模拟登录,即第一次访问登录URL后后续请求就是登录状态。
- 自动识别304跳转并二次请求
- 自动识别页面编码,即根据header信息或者页面中的相关标签信息自动识别编码,最大可能避免乱码。
- 自动识别并解压Gzip格式返回内容
特点:
- 工具化封装:Hutool 是一个 Java 工具库,其封装的
HttpUtils提供了简洁的 API,用于发送 HTTP 请求。与 Apache HttpClient 和 OkHttp 相比,Hutool 封装的HttpUtils更加简化和易用,适合快速开发。 - 轻量级:Hutool 的封装非常轻量,主要面向日常开发中的小型任务。
- 默认处理:支持自动化处理请求头、超时、编码等,开发者只需关注核心业务逻辑。
优点:
- API 简单易用,能快速上手,适合需要快速开发和简洁代码的项目。
- Hutool 提供了丰富的其他工具类,整合使用可以大大提升开发效率。
缺点:
- 不适合处理过于复杂的 HTTP 场景,定制化能力弱于 Apache HttpClient 和 OkHttp。
- 适用于一般场景下的快速开发,复杂场景可能需要自行扩展或使用其他库。
maven依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
4. 使用 Spring RestTemplate
RestTemplate 是 Spring 提供的用于调用 RESTful Web 服务的工具类,简化了发送 HTTP 请求和处理响应的操作。
5. 使用 Java 原生的HttpURLConnection
HttpURLConnection 是 Java 自带的用于发送 HTTP 请求的类。它适合处理简单的 GET、POST 请求,但对于更复杂的需求(如多部分表单数据上传、流式处理等),需要自己编写更多的代码
二、总结
- 简单场景:
HttpURLConnection和RestTemplate、Hutools的HttpUtils。 - 复杂场景:
Apache HttpClient和OkHttpClient,用于处理认证、连接池、文件上传等定制化需求。
常用三种HttpUtils对比总结
- Apache HttpClient:适用于复杂的企业级应用,功能齐全,特别是在处理高级 HTTP 功能如认证、代理、连接池等方面表现出色。
- OkHttpClient:轻量级且高效,适合高并发、移动端应用(如 Android 开发)以及需要异步请求的场景,性能好且使用简单。
- Hutool 封装的 HttpUtils:工具类封装简洁,适合快速开发和处理简单的 HTTP 请求,适合轻量级项目。
可以根据项目需求选择合适的工具可以有效简化 HTTP 请求的处理逻辑。
=======================================================
接下来,将围绕
- Apache HttpClient
- OKhttpClient
这两种自定义Http连接池,并列举相应的例子。
相关文章:
HttpUtils工具类(一)常见的HttpUtils工具类及如何自定义java的http连接池
目录 一、几种常见的Http调用方式 1. 使用 Apache HttpClient 2. 使用 OKhttpClient 3. 使用第三方库(Hutool)的http链接池 4. 使用 Spring RestTemplate 5. 使用 Java 原生的HttpURLConnection 二、总结 常用三种HttpUtils对比总结 一、几种常见…...
使用 Lombok 遇到一个问题
起因是换了一个电脑,重新从服务器上拉了一个项目。项目是由maven构建的,在控制台中使用mvn命令编译项目时,没有任何问题,编译成功。如下图: 可是idea里面的源码,却标红了,如下: 错误…...
Linux基础环境开发工具gcc/g++ make/Makefile
1.Linux编译器-gcc/g使用 1. 预处理(进行宏替换) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。 选项“-o”是指目标…...
ES 模糊查询 wildcard 的替代方案探索
一、Wildcard 概述 Wildcard 是一种支持通配符的模糊检索方式。在 Elasticsearch 中,它使用星号 * 代表零个或多个字符,问号 ? 代表单个字符。 其使用方式多样,例如可以通过 {"wildcard": {"field_name": "value&…...
Linux安装MQTT 服务器(图文教程)
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽和不稳定的网络环境设计,非常适合物联网(IoT)应用。 官网地址:https://www.emqx.com/ 一、版本选择 根据自己…...
【TCP】核心机制:延时应答、捎带应答和面向字节流
文章目录 延时应答捎带应答面向字节流粘包问题方案一:指定分隔符方案二:指定数据的长度 TCP 报头首部长度保留(6 位)选项序号确认序号 延时应答 尽可能降低可靠传输带来的性能影响 提升性能>让滑动窗口变大 如果我们立即返回 …...
题解:AT_abc352_e [ABC352E] Clique Connect
[题目通道]([ABC352E] Clique Connect - 洛谷) 鄙人今日写人生第一篇题解 希望管理大大通过 首先,我们先看题: 它说一共有n个点,m回操作。。。 每次操作 都有 一个Ki 和 Ci Ki代表有Ki个点,Ci代表每条边所赋的边权 一看就知道这是个最小生成树的板子…...
【代码随想录训练营第42期 Day32打卡 - 从零开始动态规划 - LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
目录 一、做题心得 二、动规五步走 三、题目与题解 题目一:509. 斐波那契数 题目链接 题解1:记忆性递归 题解2:动态规划 题目二:70. 爬楼梯 题目链接 题解:动态规划 题目三:746. 使用最小花费爬楼…...
源码构建LAMP
目录 一、安装Apache 二、安装Mysql 三、安装PHP 四、安装论坛 一、安装Apache 1.cd 到opt目录下面,将压缩包拉进Xhell 2.解压缩apr和httpd压缩包 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar xf httpd-2.4.29.tar.bz2 3.将apr-1.6.2 移动到ht…...
Java:封装树结构
实体类 public class DictTreeselectVO {private String value;private String label;/*** 节点*/private String parentId;private List<DictTreeselectVO> children new ArrayList<DictTreeselectVO>();public String getValue() {return value;}public void s…...
linux内核 pintrl子系统
1、什么是pinctrl子系统 在 Linux 内核中,pinctrl子系统是一个专门用于管理和控制 SoC引脚复用和配置的子系统。SoC 通常具有大量的引脚(pin),这些引脚可以被配置为不同的功能,比如 GPIO(通用输入输出&…...
网络通信要素
网络介绍 定义:将具有独立功能的多台计算机通过通信线路和通信设备连接起来,在网络管理软件及网络通信协议下,实现资源共享和信息传递的虚拟平台。 学习网络的目的: 能够编写基于网络通信的软件或程序,通常来说就是网…...
day03_作业
一、简答题 继承的格式与好处 格式:class A extends B 好处:1.可以实现代码的复用,将共性的代码向上抽取,抽取到父类中。需要使用这些属性和行为的类,通过继承即可使用。2.当需要添加新的功能时,可以通过…...
pyinstaller程序打包,资源嵌入exe
参考:https://blog.csdn.net/qq_48979387/article/details/132359366 一、参数说明 -F 最终打包为一个可执行文件。-w 取消Windows显示窗口-add-data ‘dll;dll’,将当前目录dll下的文件打包到可执行文件的dll中,最终会在解压文件的dll文件…...
如何使用 OCR 和 GPT-4o mini 轻松提取收据信息
利用 OCR 和强大的 GPT-4o 迷你模型对收据进行信息提取 利用 OCR 和强大的 GPT-4o 迷你模型对收据进行信息提取 欢迎来到雲闪世界。,我将向您展示如何从收据中提取信息,并提供收据的简单图像。首先,我们将利用 OCR 从收据中提取信息。然后&a…...
go 事务
事务处理 首先启动事务时一定要做错误判断建议在启动事务之后马上写defer方法在defer方法内对err进行判断,如果全局中有err!nil就回滚全局中err都为nil则提交事务在提交事务之后我们可以定义一个钩子函数afterCommit,来统一处理事务提交后的逻辑。 示例…...
C,数据结构,多进程线程,网络编程面试题总结
目录 1.指针数组和数组指针 2.结构体字节对齐 3.Tcp和Udp的区别 4.同步通信和异步通信的区别 5.多线程理解 6.大小端验证 7.互斥锁相关问题 8.共享内存特点 9.c中的指针 10.Gcc编译 11.Socket的了解 12.Ip地址和子网掩码如何决定网卡所在的网段 13.数据结构中栈与…...
【Cesium学习】着色器详解【待进一步总结】
在Cesium中,drawCommand 和 CustomShader 是与渲染管线和自定义渲染效果相关的两个重要概念,但它们各自有不同的作用和应用场景。下面我将分别详解这两个概念。 drawCommand drawCommand 是 Cesium 渲染引擎内部使用的一个概念,它代表了单个…...
【3】静态路由(Static routing)
目录 一、有类路由和无类路由 二、路由的基本知识 三、配置 路由的组成: 四、特殊——默认路由 五、优点和缺点 六、实验 数据通信是双向的,路由器不同的接口属于不同的广播域和冲突域 一、有类路由和无类路由 有类路由:有ABC类别之…...
阿里声音项目Qwen2-Audio的部署安装,在服务器Ubuntu22.04系统——点动科技
阿里声音项目Qwen2-Audio的部署安装,在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表:2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有…...
【ZYNQ】AXI4总线协议实战:从握手时序到PS-PL高效通信
1. AXI4总线协议基础:从握手信号到通道架构 第一次接触ZYNQ的PS-PL通信时,我被AXI4协议里那些VALID/READY信号搞得头晕眼花。直到在示波器上抓到真实的握手波形,才突然理解这个看似复杂的协议其实像极了我们日常的对话机制——只有当说话方准…...
怎样免费让老Mac重获新生:OpenCore Legacy Patcher专业教程
怎样免费让老Mac重获新生:OpenCore Legacy Patcher专业教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想让你的旧Mac重新焕发活力吗…...
从GitHub克隆到点亮LED:手把手教你用Ubuntu编译调试别人的STM32工程
从GitHub克隆到点亮LED:手把手教你用Ubuntu编译调试别人的STM32工程 在开源硬件社区,GitHub上每天都有大量优秀的STM32项目被分享——从智能家居控制器到四轴飞行器飞控系统。但当开发者满怀期待地git clone后,却常常在第一步"编译通过&…...
游戏技能工程化:用数据驱动与计算机视觉构建Apex Legends个人成长系统
1. 项目概述:从“Apex Growth”到“OpenClaw Skill”的爬升之路如果你是一名游戏开发者,尤其是对竞技类FPS(第一人称射击)游戏感兴趣,那么“Apex Legends”这个名字你一定不陌生。这款游戏以其快节奏、高机动性和深度的…...
多智能体强化学习环境PettingZoo:从核心概念到工程实践
1. 项目概述:从零理解PettingZoo如果你正在寻找一个能让你快速上手、高效构建多智能体强化学习(Multi-Agent Reinforcement Learning, MARL)实验环境的工具,那么Farama Foundation旗下的PettingZoo项目,绝对是你绕不开…...
React轻量级代码编辑器组件:基于Textarea的语法高亮方案
1. 项目概述:一个为React开发者量身打造的代码编辑器组件 如果你在React项目中需要嵌入一个代码编辑器,并且希望它轻量、美观、开箱即用,那么 uiwjs/react-textarea-code-editor 这个组件库很可能就是你一直在寻找的解决方案。它不是一个像…...
本地可控 AI 助手搭建|Windows 一键安装 OpenClaw 操作指南
OpenClaw(小龙虾)Windows 一键部署保姆级教程|10 分钟搭建专属数字员工 前言 2026 年备受关注的开源 AI 智能体 OpenClaw(昵称小龙虾),在 GitHub 收获大量关注,凭借本地运行、零代码操作、自动…...
龙芯3A6000平台Loongnix系统部署实战:从固件更新到驱动配置全解析
1. 项目概述:一次国产平台上的系统部署实战最近,我拿到了一台基于龙芯3A6000处理器和7A2000桥片的国产台式机。对于长期在x86/ARM生态里打转的开发者来说,这无疑是一个充满新鲜感和挑战的“新玩具”。它的核心使命,就是运行龙芯社…...
数据分析师GitHub作品集构建指南:从项目架构到技术实现
1. 项目概述:一个数据分析师的作品集仓库意味着什么? 在数据驱动的时代,简历上的“精通Python/SQL”已经不够看了。面试官,尤其是那些懂行的技术面试官,更想看到的是你如何用这些工具解决真实世界的问题。这就是为什么…...
构建高质量Awesome清单:开源项目精选与维护实践指南
1. 项目概述:为什么我们需要一个“Awesome”清单?在开源的世界里,信息过载是每个开发者、技术爱好者乃至项目经理都面临的共同挑战。每天,GitHub、GitLab等平台上都会涌现出成千上万个新项目,从精巧的工具库到庞大的系…...
