Java进阶篇--HttpClient工具类

目录

什么是HttpClient

HttpClient的注意事项

HttpClient的使用流程

HttpClient常用方法

HttpClient工具类

添加依赖


什么是HttpClient

HttpClient 是 Apache HttpComponents 的一个子项目,旨在提供高效的、最新的、功能丰富的 HTTP 协议客户端编程工具包。它是一个 Java 库,可用于在 Java 应用程序中发送 HTTP 请求并处理 HTTP 响应。

HttpClient 提供了一组 API,使开发人员能够轻松地构建和管理 HTTP 请求,同时它还提供了各种功能,例如连接管理、重定向处理、代理服务器支持、请求/响应拦截器等。

HttpClient 支持 HTTP/1.1 和 HTTP/2 协议,实现了所有 HTTP 的方法(GET,POST,PUT,DELETE 等),支持自动转向,支持代理服务器,支持 HTTPS 协议进行安全传输。

它具有以下主要特点:

  1. 高效的连接管理:HttpClient 支持连接池、连接重用、连接保持等功能,可以有效地减少网络连接的开销。
  2. 灵活的请求和响应处理:开发人员可以轻松地构建 HTTP 请求,并且可以方便地对响应进行处理。
  3. 对 WebSocket 的支持:HttpClient 支持 WebSocket 协议,可以方便地进行 WebSocket 通信。
  4. 灵活的拦截器:开发人员可以方便地通过拦截器对请求和响应进行预处理和后处理。
  5. 支持 HTTPS 协议:HttpClient 支持 HTTPS 协议,可以保证数据的安全传输。

总之,HttpClient 是一个功能强大、易于使用、灵活的 HTTP 客户端编程工具包,适用于各种 Java 应用程序。

注意

HttpClient 3.x 版本与 HttpClient 4.x 版本之间确实存在较大的变化。在 HttpClient 4.x 版本中,API 被设计为更加模块化和扩展性,以便支持更多的 HTTP 方法和协议。此外,HttpClient 4.x 版本还提供了更强大的连接管理、重定向处理、代理服务器支持、请求/响应拦截器等功能。

如果从 HttpClient 3.x 版本升级到 HttpClient 4.x 版本,需要重新编写部分代码,并适应新的 API。建议参考 HttpClient 的官方文档或相关的迁移指南,以了解如何在 HttpClient 4.x 版本中实现相同的功能。

HttpClient的注意事项

HttpClient 是一个 HTTP 客户端库,主要用于发送和接收 HTTP 消息,但它并不具备以下一些特定的功能:

  1. 处理 HTTP 消息的内容:HttpClient 仅负责传输 HTTP 消息,但不会对消息的内容进行任何处理或解析。它不会执行像 JavaScript 这样的动态代码,也不会关注消息内容的类型或格式。
  2. 解析 HTML 或其他标记语言:HttpClient 并不具备解析 HTML 或其他标记语言的能力。它只关注 HTTP 消息的传输和基本处理,而不涉及对这些标记语言的解析和操作。
  3. 处理 content type:HttpClient 本身并不处理或解析 HTTP 消息的内容类型(content type)。它只是将接收到的 HTTP 消息原样传递给调用者,而不关心消息的具体内容类型或格式。
  4. 执行重定向:默认情况下,HttpClient 不会自动执行 HTTP 重定向。它只会发送原始的 HTTP 请求,并等待服务器返回响应。如果服务器返回了重定向响应,HttpClient 需要由开发人员手动处理重定向。
  5. 处理其他与 HTTP 消息传输相关的功能:HttpClient 主要关注的是发送和接收 HTTP 消息,对于一些与 HTTP 消息传输相关的功能,如身份验证、缓存、代理等,HttpClient 可能需要配合其他库或配置来实现。

总之,HttpClient 是一个强大的 HTTP 客户端库,主要用于发送和接收 HTTP 消息。然而,它并不具备处理 HTTP 消息内容、解析标记语言、自动执行重定向或其他一些与 HTTP 消息传输相关的特定功能。

HttpClient的使用流程

使用 HttpClient 工具类发送 HTTP 请求的流程通常如下:

  1. 创建 HttpClient 对象。
  2. 创建请求方法的实例,并指定请求 URL。如果需要发送 GET 请求,创建 HttpGet 对象;如果需要发送 POST 请求,创建 HttpPost 对象。
  3. 如果需要发送请求参数,可调用 HttpGet、HttpPost 共同的 setParams(HttpParams params) 方法来添加请求参数;对于 HttpPost 对象而言,也可调用 setEntity(HttpEntity entity) 方法来设置请求参数。
  4. 调用 HttpClient 对象的 execute(HttpUriRequest request) 发送请求,该方法返回一个 HttpResponse。
  5. 调用 HttpResponse 的 getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用 HttpResponse 的 getEntity() 方法可获取 HttpEntity 对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
  6. 释放连接。注意:无论执行方法是否成功,都必须释放连接。

HttpClient常用方法

HttpClient 4.x 是一个用于发送 HTTP 请求的 Java 库,它提供了一组方法来执行各种 HTTP 操作。以下是一些 HttpClient 4.x 的常用方法:

  1. execute(HttpUriRequest request): 发送请求并返回一个 HttpResponse 对象。
  2. execute(HttpUriRequest request, HttpContext context): 与上一个方法类似,但增加了额外的上下文信息。
  3. execute(HttpHost target, HttpRequest request): 在给定的目标主机上发送请求并返回 HttpResponse。
  4. execute(HttpHost target, HttpRequest request, HttpContext context): 与上一个方法类似,但增加了额外的上下文信息。
  5. send(HttpEntityEnclosingRequest request, HttpResponse responseHandler): 发送请求并使用指定的响应处理器处理响应。
  6. send(HttpEntityEnclosingRequest request, Class responseType): 发送请求并返回指定类型的响应对象。
  7. send(HttpEntityEnclosingRequest request, Type responseType): 与上一个方法类似,但指定了响应类型。
  8. getParams(): 获取 HttpClient 的参数。
  9. setParams(HttpParams params): 设置 HttpClient 的参数。
  10. getRequest(): 获取 HttpClient 的请求方法实例。
  11. setRequest(HttpRequest request): 设置 HttpClient 的请求方法实例。
  12. addHeader(String name, String value): 向请求头添加一个字段。
  13. removeHeader(String name): 从请求头中删除指定的字段。
  14. getParams(): 获取 HttpClient 的参数。
  15. setParams(HttpParams params): 设置 HttpClient 的参数。
  16. getRequest(): 获取 HttpClient 的请求方法实例。
  17. setRequest(HttpRequest request): 设置 HttpClient 的请求方法实例。
  18. addHeader(String name, String value): 向请求头添加一个字段。
  19. removeHeader(String name): 从请求头中删除指定的字段。
  20. getAllHeaders(): 获取所有请求头的字段。
  21. getHeaders(String name): 获取指定名称的请求头的字段。
  22. setEntity(HttpEntity entity): 设置请求参数实体。
  23. getEntity(): 获取响应内容的 HttpEntity 对象。
  24. releaseConnection(): 释放连接资源。

HttpClient工具类

添加依赖

<properties><httpclient.version>4.5.5</httpclient.version><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><!-- springboot的web和test启动库 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- apache httpclient组件 --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 跳过单元测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin></plugins></build>

下面是一个使用 HttpClient 发送 GET 请求的示例代码: 

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class HttpClientExample {public static void main(String[] args) throws Exception {// 创建 HttpClient 对象CloseableHttpClient httpClient = HttpClients.createDefault();// 创建 HttpGet 对象,并指定请求 URLHttpGet httpGet = new HttpGet("http://www.example.com");// 发送 GET 请求,并获取 HttpResponseHttpResponse httpResponse = httpClient.execute(httpGet);// 获取响应状态码和响应实体int statusCode = httpResponse.getStatusLine().getStatusCode();HttpEntity httpEntity = httpResponse.getEntity();// 处理响应内容if (httpEntity != null) {String responseString = EntityUtils.toString(httpEntity);System.out.println("Response Code: " + statusCode);System.out.println("Response Content: " + responseString);}// 释放连接资源httpClient.close();}
}

注意

httpClient.close() 是用于关闭 HttpClient 连接的函数。HttpClient 是用于发送 HTTP 请求的 Java 库,当不再需要使用 HttpClient 时,应该调用 close() 函数来释放资源,以避免资源泄漏。

具体来说,httpClient.close() 函数会关闭与服务器之间的连接,并释放相关的资源,如网络连接、线程池等。这有助于提高应用程序的性能和资源利用率,同时避免不必要的资源占用。

在使用 HttpClient 发送完 HTTP 请求后,建议及时调用 close() 函数关闭连接,以保持良好的应用程序性能和资源管理。

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

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

相关文章

【JavaScript精通之道】掌握数据遍历:解锁现代化遍历方法,提升开发效率!

​ &#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4da; 前言 &#x1f4d8; 1. reduce方法 &#x1f4d8; 2. forEach方法 &#x1f4d8; 3. map方法…

浏览器连不上 Flink WebUI 8081 端口

安装 flink-1.17.0 后&#xff0c;start-cluster.sh 启动&#xff0c;发现浏览器连不上 Flink WebUI 的8081端口。 问题排查&#xff1a; command R&#xff0c;输入cmd&#xff0c;检查宿主机能否ping通虚拟机&#xff0c;发现能ping通。 检查是否有flink以外的任务占用8081…

Centos替代方案分析(Ubuntu篇)

最受欢迎Linux操作系统 在上百个Linux版本中&#xff0c;Ubuntu和CentOS是最受欢迎的开源操作系统&#xff0c;以其稳定性、高性能和广泛的社区支持而闻名。Ubuntu以友好的用户界面和多样的应用程序生态系统吸引着广大用户&#xff0c;适用于桌面和服务器。而CentOS则因其与RH…

一体化数据安全平台 uDSP 获“金鼎奖”优秀金融科技解决方案奖

近日&#xff0c;2023 年中国国际金融展“金鼎奖”评选结果揭晓&#xff0c;原点安全打造的“一体化数据安全平台 uDSP”产品获评“金鼎奖”优秀金融科技解决方案奖。该产品目前已广泛应用于银行业、保险企业、证券、医疗、互联网、政务、在线教育等诸多领域。此次获奖再次印证…

C++ STL unordered_map容器使用教程

文章目录 Map、HashMap概念map、hashmap 的区别引用头文件初始化赋值unordered_map 自定义键值类型unordered_map 的 value 自定义数据类型遍历迭代器常用方法插入查找 key修改 value删除元素清空元素 unordered_map 中每一个元素都是一个 key-value 对&#xff0c;数据类型为 …

如何避免重复消费消息

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

【⑯MySQL | 存储过程与函数】概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL存储过程与函数概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议的分享✨ 目录 前言1. 存储过程概述2. 创建存储过程3. 调用存储过程4. 存储函数的使用5. 存储过程和函数的查看、修改、删除6. 关于存储过程使用…

这个 AI 机器人会怼人,它是怎么做到的?

近期&#xff0c;机器人“Ameca”接入了 Stable Diffusion&#xff0c;它一边与旁边的人类工程师谈笑风生&#xff0c;一边熟练地用马克笔在白板上画出一只简笔的猫&#xff0c;最后还在白板右下角签名。 当 Ameca 询问工程师是否对它的作品是否满意时&#xff0c;工程师回答“…

光流法相关论文-LK光流法,HS光流法,Farneback光流法,FlowNet: 端到端的深度光流估计, RAFT: 结构化的光流估计

目录 光流法 1. Lucas-Kanade光流法&#xff08;稀疏光流法&#xff09;&#xff1a; 2. Horn-Schunck光流法&#xff08;稠密光流法&#xff09;&#xff1a; 3. Farneback光流法&#xff1a; 4 FlowNet: 端到端的深度光流估计&#xff1a; 5. RAFT: 结构化的光流…

react中redux的详细使用以及持久化处理

一.redux使用 1.安装 npm i redux 例一&#xff1a; 2.创建redux文件夹&#xff0c;store.js文件 store.js文件 import {legacy_createStore as createStore,combineReducers}from "redux" // 每一块状态内容对应一个reducer文件 import {CollApsedReducer} fro…

基于空洞卷积DCNN与长短期时间记忆模型LSTM的dcnn-lstm的回归预测模型

周末的时候有时间鼓捣的一个小实践&#xff0c;主要就是做的多因子回归预测的任务&#xff0c;关于时序数据建模和回归预测建模我的专栏和系列博文里面已经有了非常详细的介绍了&#xff0c;这里就不再多加赘述了&#xff0c;这里主要是一个模型融合的实践&#xff0c;这里的数…

[论文笔记]DSSM

引言 这是DSSM论文的阅读笔记,后续会有一篇文章来复现它并在中文数据集上验证效果。 本文的标题翻译过来就是利用点击数据学习网页搜索中深层结构化语义模型,这篇论文被归类为信息检索,但也可以用来做文本匹配。 这是一篇经典的工作,在DSSM之前,通常使用传统机器学习的…

博客系统后台控制层接口编写

BlogColumnCon CrossOrigin RequestMapping("/back/blogColumn") RestController public class BlogColumnCon {Autowiredprivate BlogColumnService blogColumnService;/*** 新增** param blogColumn* return*/PostMapping("/add")public BaseResult add…

【自定义物体不受后处理(Volume)影响的组件_Custom Pass Volume】

自定义物体不受后处理影响 "Custom Pass Volume"1. **自定义渲染Custom Pass Volume组件:** 面板如下。2.具体设置如图3.在Frame Debugger视图下是这样的:4.在Frame Debugger带有Custom Pass Volume组件的渲染Pass已经改写成 AfterPostProcess5.记得添加Shader中的…

Docker 的基本概念和优势

Docker 是一种开源的容器化平台&#xff0c;可以轻松部署、管理和运行应用程序。它基于 Linux 容器技术&#xff0c;可以将应用程序和其依赖项打包到一个可移植的容器中&#xff0c;从而使应用程序更易于部署、移植和扩展。 Docker 的主要优势包括&#xff1a; 1. 简化部署&a…

iOS 使用coreData存贮页面的模型数据中的字典

我们使用coreData时候&#xff0c;会遇到较为复杂的数据类型的存贮&#xff0c;例如&#xff0c;我们要存一个模型&#xff0c;但是一个模型里面有个字典&#xff0c;这时候&#xff0c;我们该如何存贮呢 如图所示&#xff0c;一个对象中含有一个字典 我们实现一个公共的方法…

【ArcGIS Pro二次开发】(64):多分式标注

在ArcGIS中有时会遇到需要二分式标注的情况&#xff0c;有时甚至是三分式、四分式。 通过输入标注表达式&#xff0c;可以做出如下的效果&#xff0c;但是代码不短&#xff0c;每次都要输一遍也挺麻烦。 网上也有一些分式标注的python工具&#xff0c;但不够直观&#xff0c;于…

港联证券|股票过户费是什么意思?

股票过户费是指在股票商场中&#xff0c;由于股份所有权的转让&#xff0c;双方需求付出的一种买卖费用。这种费用首要是为了付出证券公司和证券中介机构转让股票所发生的各项费用&#xff0c;如代理费、登记费、买卖税等。股票过户费的数额一般是按照股票的数量和买卖金额来核…

Git学习part1

02.尚硅谷_Git&GitHub_为什么要使用版本控制_哔哩哔哩_bilibili 1.Git必要性 记录代码开发的历史状态 &#xff0c;允许很多人同时修改文件&#xff08;分布式&#xff09;且不会丢失记录 2.版本控制工具应该具备的功能 1&#xff09;协同修改 多人并行不悖的修改服务器端…

rust交叉编译 在mac下编译linux和windows

系统版本macbook proVentura 13.5linux ubuntu22.04.3 LTS/18.04.6 LTSwindowswindows 10 专业版 20H2mac下rustc --versionrustc 1.74.0-nightly (58eefc33a 2023-08-24)查看当前系统支持的交叉编译指定系统版本列表 rustup target list如果已经安装这里会显示(installed)。…