当前位置: 首页 > news >正文

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.lryc.cn/news/527158.html

相关文章:

  • 二级 二维数组3
  • 【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM
  • javascript-es6 (一)
  • 数据结构——二叉树——堆(1)
  • window保存好看的桌面壁纸
  • docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令
  • 98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
  • 【自然语言处理(NLP)】长短期记忆网络(Long - Short Term Memory,LSTM)原理和代码实现(从零实现、Pytorch实现)
  • 八股学习 微服务篇
  • TCP协议:互联网数据传输的守护者
  • 协助工具-任意门导航
  • 【MCAL实战】MCU模块配置实践
  • OpenAI 发布首个 AI 智能体
  • 【Python】导入类
  • Deepseek实现本地电影文件批量重命名为infuse格式,可匹配IMDB
  • Nginx部署的前端项目刷新404问题
  • Boot 系统选择U启动
  • XSLT 编辑 XML:深度解析与实际应用
  • 项目文章 | PNAS 斑马鱼转录因子ChIP-seq助力解析GATA6突变相关的肝脏疾病机制
  • easyexcel-导入(读取)(read)-示例及核心部件
  • 作业day3
  • 第五节 MATLAB命令
  • Oracle 普通用户连接hang住处理方法
  • 理解C++中的右值引用
  • 02-机器学习-核心概念
  • 1.26 实现文件拷贝的功能
  • ES6+新特性,var、let 和 const 的区别
  • HarmonyOS简介:HarmonyOS核心技术理念
  • 嵌入式C语言:结构体对齐
  • 【Rust自学】15.5. Rc<T>:引用计数智能指针与共享所有权