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请求对象

调用HttpClientexecute方法发送请求

二、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"}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源先锋DeepSeek-V3 LLM 大语言模型本地调用,打造自己专属 AI 助手

DeepSeek-V3是一个强大的混合专家 (MoE) 语言模型&#xff0c;总共有 671B 个参数。为了实现高效的推理和经济高效的训练&#xff0c;DeepSeek-V3 采用了多头潜在注意力机制 (MLA) 和 DeepSeekMoE 架构&#xff0c;这些架构在 DeepSeek-V2 中得到了彻底的验证。此外&#xff0c…

喜报丨迪捷软件入选2025年浙江省“重点省专”

根据《浙江省经济和信息化厅 浙江省财政厅关于进一步支持专精特新中小企业高质量发展的通知》&#xff08;浙经信企业〔2024〕232号&#xff09;有关要求&#xff0c;经企业自主申报、地方推荐、材料初审以及专家评审等程序&#xff0c;浙江省经济和信息化厅发布了2025年浙江省…

Golang Gin系列-8:单元测试与调试技术

在本章中&#xff0c;我们将探讨如何为Gin应用程序编写单元测试&#xff0c;使用有效的调试技术&#xff0c;以及优化性能。这包括设置测试环境、为处理程序和中间件编写测试、使用日志记录、使用调试工具以及分析应用程序以提高性能。 为Gin应用程序编写单元测试 设置测试环境…

深度学习 Pytorch 单层神经网络

神经网络是模仿人类大脑结构所构建的算法&#xff0c;在人脑里&#xff0c;我们有轴突连接神经元&#xff0c;在算法中&#xff0c;我们用圆表示神经元&#xff0c;用线表示神经元之间的连接&#xff0c;数据从神经网络的左侧输入&#xff0c;让神经元处理之后&#xff0c;从右…

Arduino大师练成手册 --控制 OLED

要在 Arduino 上使用 U8glib 库控制带有 7 个引脚的 SPI OLED 显示屏&#xff0c;你可以按照以下步骤进行&#xff1a; 7pin OLED硬件连接 GND&#xff1a;连接到 Arduino 的 GND 引脚。 VCC&#xff1a;连接到 Arduino 的 5V 引脚。 D0&#xff08;或 SCK/CLK&#xff09;…

CVE-2024-23897-Jenkins任意文件读取漏洞复现

content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎&#xff0c;用于持续、自动地构建/测试软件项目&#xff0c;可以监控一些定时执行的任务。 官网文档&#xff1a; Jenkins是一款开源 CI&CD 软件&…

Lua 环境的安装

1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装&#xff0c;安装指令如下&#xff1a; winget install "lua for windows" 也曾使用可执行程序安装过&#xff0c;但由于电脑是加密电脑&#xff0c;最后都已失败告终。使用此方式安装可以安…

基于微信小程序的网上订餐管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【矩阵二分】力扣378. 有序矩阵中第 K 小的元素

给你一个 n x n 矩阵 matrix &#xff0c;其中每行和每列元素均按升序排序&#xff0c;找到矩阵中第 k 小的元素。 请注意&#xff0c;它是 排序后 的第 k 小元素&#xff0c;而不是第 k 个 不同 的元素。 你必须找到一个内存复杂度优于 O(n2) 的解决方案。 示例 1&#xff1…

基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Linux Futex学习笔记

Futex 简介 概述&#xff1a; Futex(Fast Userspace Mutex)是linux的一种特有机制&#xff0c;设计目标是避免传统的线程同步原语&#xff08;如mutex、条件变量等&#xff09;在用户空间和内核空间之间频繁的上下文切换。Futex允许在用户空间处理锁定和等待的操作&#xff0…

小柯剧场训练营第一期音乐剧演员与第二期报名拉开帷幕!

在当下社会文化浪潮中&#xff0c;小柯剧场凭借其独特的培养模式和“先看戏后买票”的良心举措&#xff0c;已然成为艺术界的一股清流。1月12日&#xff0c;由“第一期免费训练营”优秀学员们所带来的新一代《稳稳的幸福》成功落幕&#xff0c;引起了社会的广泛关注。该活动不仅…

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测

完整源码项目包获取→点击文章末尾名片&#xff01; 番石榴病害数据集 背景描述 番石榴 &#xff08;Psidium guajava&#xff09; 是南亚的主要作物&#xff0c;尤其是在孟加拉国。它富含维生素 C 和纤维&#xff0c;支持区域经济和营养。不幸的是&#xff0c;番石榴生产受到降…

【论文阅读】HumanPlus: Humanoid Shadowing and Imitation from Humans

作者&#xff1a;Zipeng Fu、Qingqing Zhao、Qi Wu、Gordon Wetstein、Chelsea Finn 项目共同负责人&#xff0c;斯坦福大学 项目网址&#xff1a;https://humanoid-ai.github.io 摘要 制造外形与人类相似的机器人的一个关键理由是&#xff0c;我们可以利用大量的人类数据进行…

PVE 虚拟机安装 Debian 无图形化界面服务器

Debian 安装 Debian 镜像下载 找一个Debian镜像服务器&#xff0c;根据需要的版本和自己硬件选择。 iso-cd/&#xff1a;较小&#xff0c;仅包含安装所需的基础组件&#xff0c;可能需要网络访问来完成安装。有镜像 debian-12.9.0-amd64-netinst.isoiso-dvd/&#xff1a;较…

硬件学习笔记--35 AD23的使用常规操作

原理图设计 1&#xff09;新建原理图&#xff0c;File-new-Schematic。相关设置参考&#xff0c;主要包含图纸设置以及常规的工具栏。 PCB的设计 新建PCB&#xff0c;设置相应的规则&#xff08;与原理图中相对应&#xff09;&#xff0c;放到同一个工程中。如果有上一版本的…

解读2025年生物医药创新技术:展览会与论坛的重要性

2025生物医药创新技术与应用发展展览会暨论坛&#xff0c;由天津市生物医药行业协会、BIO CHINA生物发酵展组委会携手主办&#xff0c;山东信世会展服务有限公司承办&#xff0c;定于2025年3月3日至5日在济南黄河国际会展中心盛大开幕。展会规模60000平方米、800参展商、35场会…

开始步入达梦中级dba

分析内存使用需要的方法之一 disql /nolog conn sysdba/sysdbaselect value from v$parameter where nameMEMORY_LEAK_CHECK; SP_SET_PARA_VALUE(0,MEMORY_LEAK_CHECK,1); select * from V$MEM_REGINFO; select * from V$MEM_HEAP;

UDP 广播组播点播的区别及联系

1、网络IP地址的分类 组播地址是分类编址的IPv4地址中的D类地址&#xff0c;又叫多播地址&#xff0c;他的前四位必须是1110&#xff0c;所以网络地址的二进制取值范围是11100000~11101111对应的十进制为 224~~239。所以以224~239开头的网络地址都是组播地址。 组播地址的功能…

opengrok_使用技巧

Searchhttps://xrefandroid.com/android-15.0.0_r1/https://xrefandroid.com/android-15.0.0_r1/ 选择搜索的目录&#xff08;工程&#xff09; 手动在下拉框中选择&#xff0c;或者 使用下面三个快捷按钮进行选择或者取消选择。 输入搜索的条件 搜索域说明 域 fullSearc…