HttpClient学习
目录
一、概述
二、HttpClient依赖介绍
1.导入HttpClient4依赖
2.或者导入HttpClient5依赖
3.二者区别
三、HttpClient发送Get请求和Post请求测试
(一)通过HttpClient发送Get请求
(二)通过HttpClient发送Post请求
一、概述
HttpClient是 Apache 软件基金会提供的一个用于 Java 应用程序的 HTTP 协议访问库。它提供了强大的功能来处理 HTTP 请求和响应,支持同步和异步通信、连接池管理、cookie管理、SSL/TLS加密等特性。从Java 11开始,标准Java库中也引入了一个新的HttpClient实现,这为开发者提供了原生的支持。

核心API:
•HttpClient
•HttpClients
•CloseableHttpClient
•HttpGet
•HttpPost
发送请求步骤:
•创建HttpClient对象
•创建Http请求对象
•调用HttpClient的execute方法发送请求
二、HttpClient依赖介绍
1.导入HttpClient4依赖
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>
依赖说明:
- 第四代HttpClient:这是HttpClient的一个较老但仍然广泛使用的版本,被称为HttpClient 4。尽管它没有HttpClient 5中的一些现代化特性,但它非常稳定,并且有大量的文档和支持。
- 特点:
- 提供了丰富的功能集来处理各种HTTP操作。
- 广泛应用于现有的许多Java应用程序中。
- 良好的向后兼容性。
- 维护状态:虽然官方仍在为该版本提供关键的安全修复,但它已进入维护模式,意味着主要的新功能开发已经转向HttpClient 5。
另外,如果你的项目中使用了阿里云OSS对象存储,那么上面的依赖不需要导入,因为阿里云OSS依赖底层调用的就是HttpClient
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>
</dependency>
2.或者导入HttpClient5依赖
<dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.2.1</version> <!-- 确保使用最新版本 -->
</dependency>
依赖说明
- 第五代HttpClient:这是Apache HttpClient项目的最新一代,通常称为HttpClient 5。它旨在提供改进的性能、更好的异步支持和更现代的API。
- 新特性与改进:
- 支持HTTP/2。
- 更好的异步请求处理能力。
- 改进的连接管理和资源管理。
- 更清晰的API设计,便于理解和使用。
- 维护状态:这是一个活跃开发中的版本,推荐用于新的项目或者需要利用其新增特性的场景。
3.二者区别
主要区别
- 版本差异:最显著的区别在于一个是第5代(5.x),另一个是第4代(4.x)产品线。
- 功能集:HttpClient 5引入了许多新特性,如对HTTP/2的支持,改进的异步API等,而HttpClient 4则侧重于稳定性和广泛的现有应用支持。
- API设计:HttpClient 5提供了更新、更简洁的API设计,而HttpClient 4的API虽然也很强大,但在某些方面可能显得稍微陈旧一些。
- 未来方向:HttpClient 5代表了这个库的未来发展方向,而HttpClient 4主要是为了支持现有的用户群并确保稳定性。
如何选择
- 如果你在启动一个新项目或希望利用最新的HTTP协议特性和改进的API设计,那么应该考虑使用HttpClient 5。
- 如果你的项目依赖于大量的HttpClient 4代码,或者你需要保持与现有系统的一致性,那么继续使用HttpClient 4可能是更安全的选择。
注意:同时包含这两个依赖可能会导致类冲突或其他兼容性问题,因此建议根据具体情况仅选择其中一个版本使用。如果决定迁移至HttpClient 5,请确保测试所有相关功能以保证兼容性。
三、HttpClient发送Get请求和Post请求测试
这里使用的是JDK8,并且引入了阿里云OSS对象存储
(一)通过HttpClient发送Get请求
@Test
public void testGet() throws Exception {// 1. 创建HttpGet对象,设置请求的url地址CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");// 2. 使用HttpClient对象执行请求,得到一个HttpResponse对象CloseableHttpResponse response = httpClient.execute(httpGet);// 3. 获取响应状态码int statusCode = response.getStatusLine().getStatusCode();System.out.println("statusCode = " + statusCode);// 4. 从HttpResponse对象中获取响应体HttpEntity entity = response.getEntity();String body = EntityUtils.toString(entity);System.out.println("body = " + body);// 4. 关闭HttpClient对象response.close();httpClient.close();
}
运行结果:
statusCode = 200
body = {"code":1,"msg":null,"data":1}
(二)通过HttpClient发送Post请求
@Test
public void testPost() throws Exception {// 1. 创建HttpGet对象,设置请求的url地址CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");// 2.设置请求体JSONObject jsonObject = new JSONObject();jsonObject.put("username","admin");jsonObject.put("password","123456");String body = jsonObject.toJSONString();StringEntity entity = new StringEntity(body);httpPost.setEntity(entity);// 3.设置请求体编码格式entity.setContentEncoding("UTF-8");entity.setContentType("application/json");httpPost.setEntity(entity);// 4.发送请求CloseableHttpResponse response = httpClient.execute(httpPost);// 5.获取响应状态码int statusCode = response.getStatusLine().getStatusCode();System.out.println("statusCode = " + statusCode);// 6.获取响应体HttpEntity httpEntity = response.getEntity();String result = EntityUtils.toString(httpEntity);System.out.println("result = " + result);// 7.关闭资源response.close();httpClient.close();
}
运行结果:
statusCode = 200
result = {"code":1,"msg":null,
"data":{"id":1,"userName":"admin","name":"管理员",
"token":"eyJhbGciOiJIUzI1NiJ9.eyJlbXBJZCI6MSwiZXhwIjoxNzQ1MDg0MTQyfQ._BFIF6qOdhSf8ML17fYHwnvnAXgl0Y9SAYhC2ehplTs"}}
相关文章:
HttpClient学习
目录 一、概述 二、HttpClient依赖介绍 1.导入HttpClient4依赖 2.或者导入HttpClient5依赖 3.二者区别 三、HttpClient发送Get请求和Post请求测试 (一)通过HttpClient发送Get请求 (二)通过HttpClient发送Post请求 一、概述 HttpClient是 Apache 软件基金会提供的一…...
二级 二维数组3
对角线之和 题目描述 输入一个矩阵,输出右上-左下对角线上的数字和 输入 输入1个整数N。(N<10)表示矩阵有n行n列 输出 对角线的和 样例 输入复制 4 1 2 3 4 2 3 4 5 4 5 6 7 1 2 3 4 输出复制 14 #include<iostream> using namespace std; int main() {i…...
【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM
参考: https://www.youtube.com/watch?veC6Hd1hFvos 目录: 什么是 Fine-tune 为什么需要Fine-tuning 如何进行Fine-tune Fine-tuning- Supervised Fine-tuning 流程 Fine-tuning参数训练的常用方案 LORA 简介 示例代码 一 什么是 Fine-tune …...
javascript-es6 (一)
作用域(scope) 规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问 局部作用域 函数作用域: 在函数内部声明的变量只能在函数内部被访问,外部无法直接访问 function getSum(){ //函数内部是函数作用…...
数据结构——二叉树——堆(1)
今天,我们来写一篇关于数据结构的二叉树的知识。 在学习真正的二叉树之前,我们必不可少的先了解一下二叉树的相关概念。 一:树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层…...
window保存好看的桌面壁纸
1、按下【WINR】快捷键调出“运行”窗口,输入以下命令后回车。 %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets 2、依次点击【查看】【显示】,勾选【隐藏的项目】,然后按【CtrlA】全部…...
docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令
一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull redis:7.4.0 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜像…...
98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
目录 0. 承前1. 简介1.1 通义千问(Qwen-Long)的长文本处理能力 2. 基础功能实现2.1 文件上传2.2 单文件分析2.3 多文件分析 3. 汇总代码&运行3.1 封装的工具函数3.2 主要功能特点3.3 使用示例3.4 首次运行3.5 运行结果展示 4. 注意事项4.1 文件要求4.2 错误处理机制4.3 最佳…...
【自然语言处理(NLP)】长短期记忆网络(Long - Short Term Memory,LSTM)原理和代码实现(从零实现、Pytorch实现)
文章目录 介绍长短期记忆网络(Long - Short Term Memory,LSTM)结构原理候选记忆元符号含义公式含义 记忆元符号含义公式含义 隐状态符号含义公式含义 特点应用实现 LSTMpytorch实现 个人主页:道友老李 欢迎加入社区:道…...
八股学习 微服务篇
微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件: Eureka/Nacos:注册中心;Ribbon:负载均衡;Feign:远程调用;Hystrix/Sentinel:服…...
TCP协议:互联网数据传输的守护者
在互联网的浩瀚海洋中,数据如同涓涓细流,无时无刻不在流动。而这些数据的稳定、可靠传输,离不开一个重要的协议——TCP(Transmission Control Protocol,传输控制协议)。TCP协议作为互联网协议族中的核心成员…...
协助工具-任意门导航
任意门导航网址:随意门导航-最全的实用导航网站,好用简洁宝藏网址神器...
【MCAL实战】MCU模块配置实践
目录 前言 正文 1.硬件分析 1.1 MCU系统模式分析 1.2MCU晶振使用分析 2.MCU通用配置 2.1 McuGeneralConfiguration 2.2 McuModuleConfiguration 2.3 McuResetSettingConf 2.4 McuTrapSettingConf 2.4 其他 3.MCU模式配置 3.1 McuModeSettingConf_0 3.2 McuModeSe…...
OpenAI 发布首个 AI 智能体
OpenAI 发布首个 AI 智能体 当地时间 1 月 23 日,OpenAI 发布了首个 AI 智能体 Operator124。以下是关于它的详细介绍2: 功能用途 操作网页:可模拟人类操作网页浏览器,能进行点击、滚动、输入等操作,例如在 OpenTable…...
【Python】导入类
随着不断给类添加功能,文件可能变得很长,即便妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。 Python在这方面提供了帮助,允许将类存储在模块中,然后在主程序中导入所需的模块。 导入单个类 下…...
Deepseek实现本地电影文件批量重命名为infuse格式,可匹配IMDB
import os from openai import OpenAI# 初始化DeepSeek客户端 client OpenAI(api_key"<DeepSeek API Key>", base_url"https://api.deepseek.com")def parse_filename_with_deepseek(filename):"""使用DeepSeek API解析文件名并生成…...
Nginx部署的前端项目刷新404问题
1,查看问题 我部署的81端口是监听tlias项目的,我直接访问端口页面可以出现内容。 我在浏览器舒服端口之后回车,会重定向页面。但是我在重定向之后的页面刷新浏览器就会出现404的问题。 下面是刷新浏览器后的效果 2,在nginx.cnf …...
Boot 系统选择U启动
1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好...
XSLT 编辑 XML:深度解析与实际应用
XSLT 编辑 XML:深度解析与实际应用 引言 XML(可扩展标记语言)和XSLT(可扩展样式表语言转换)是处理和转换XML数据的重要工具。本文将深入探讨XSLT在编辑XML文档中的应用,包括其基本概念、语法结构、以及实…...
项目文章 | PNAS 斑马鱼转录因子ChIP-seq助力解析GATA6突变相关的肝脏疾病机制
近日,西南大学阮华/黄红辉团队联合重庆大学邱菊辉/王贵学团队在PNAS发表了题为“An animal model recapitulates human hepatic diseases associated with GATA6 mutations”的研究论文。该研究构建了一个gata6敲除斑马鱼模型,它重现了gata6突变患者的大…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
网页端 js 读取发票里的二维码信息(图片和PDF格式)
起因 为了实现在报销流程中,发票不能重用的限制,发票上传后,希望能读出发票号,并记录发票号已用,下次不再可用于报销。 基于上面的需求,研究了OCR 的方式和读PDF的方式,实际是可行的ÿ…...
