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突变患者的大…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
