【高效开发工具系列】Hutool Http工具类

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
      • 1.hutool http 优点
      • 2.注意事项
      • 3.基本使用步骤
    • 二.实战案例
      • 1.get 请求
      • 2.get 带参数
      • 3.post 请求

一.基本介绍

1.hutool http 优点

  1. 简化了 HTTP 请求的操作,提供了丰富的 API 和工具类,方便处理 HTTP 请求和响应。
  2. 支持多种常见的 HTTP 请求方法,如 GET、POST、PUT、DELETE 等。
  3. 支持设置请求头、请求参数、请求体等。
  4. 提供了便捷的方法来处理 HTTP 响应,包括获取响应状态码、响应头、响应体等。
  5. 支持文件上传和下载功能,可以方便地进行文件的上传和下载操作。
  6. 提供了 Cookie 的操作方法,可以方便地处理 Cookie 相关的操作。
  7. 支持 HTTP 代理和 SSL/TLS 的配置。
  8. 集成了连接池,可以提高 HTTP 请求的性能和效率。
  9. 提供了异常处理机制,方便处理 HTTP 请求过程中出现的异常情况。
  10. 支持自定义拦截器,可以对 HTTP 请求进行拦截和处理。

hutool 的 HTTP 模块提供了简单、方便、灵活的方式来处理 HTTP 请求和响应,使得开发者可以更加轻松地进行网络通信相关的操作。

2.注意事项

hutool http 库的注意事项:

  1. 需要添加 hutool-http 依赖:在使用 hutool http 库之前,需要在项目的依赖中添加 hutool-http 的依赖项。
  2. 注意异常处理:在发送 HTTP 请求时,可能会出现网络连接异常、超时等问题,需要适当处理这些异常,以确保程序的稳定性。
  3. 注意请求参数的编码:在发送 POST 请求时,如果包含中文或特殊字符,需要正确设置请求参数的编码,以避免乱码或解析错误。
  4. 注意使用合适的 HTTP 方法:根据实际需求选择合适的 HTTP 方法,例如 GET 用于获取资源、POST 用于创建资源、PUT 用于更新资源、DELETE 用于删除资源等。
  5. 注意请求头的设置:根据需要设置合适的请求头,包括 Content-Type、User-Agent、Authorization 等。
  6. 注意请求体的设置:对于 POST 或 PUT 请求,需要根据接口要求设置请求体的内容和格式。
  7. 注意数据安全:在发送 HTTP 请求时,特别是涉及用户敏感信息的场景,需要注意数据的加密和安全性。

3.基本使用步骤

以下是使用 Hutool 进行 HTTP 请求的基本步骤:

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-http</artifactId><version>5.7.10</version>
</dependency>
  1. 添加 Hutool 依赖:在项目的构建文件中添加 Hutool 的依赖,例如在 Maven 项目中,在 pom.xml 文件中添加以下依赖:
  2. 创建 HttpUtil 对象:通过HttpUtil.createRequest(url)方法创建一个 HttpUtil 对象,其中url是要请求的 URL 地址。
  3. 设置请求参数:通过setXXX方法设置请求的参数,例如设置请求头、请求方法、请求体等。
  4. 发送请求:调用execute()方法发送请求。
  5. 处理响应:获取响应结果,可以通过getBody()方法获取响应体内容,getStatus()方法获取响应状态码等。

以下是一个简单的示例:

import cn.hutool.http.HttpUtil;public class HttpDemo {public static void main(String[] args) {String url = "http://example.com/api";HttpUtil.createGet(url).header("Authorization", "Bearer token").execute().body();}
}

注意:在实际使用中,可能还需要处理异常、设置超时时间、传递参数等更多操作。以上仅为基本步骤的简单示例,具体使用可以根据实际需求进行调整。

二.实战案例

1.get 请求

@Value("${command-server.command-host-url}")
private String url;@SneakyThrows
@Override
public List<TopSkuInfoDTO> getTopSkuInfo() {List<TopSkuInfoDTO> topSkuInfoDTOS = new ArrayList<>();String realUrl = url + "/open-api/v1/sku/replenish/getTopSkuInfo";HttpResponse response = HttpRequest.get(realUrl).header("User-Agent", "Mozilla/5.0").header("Accept-Language", "en-US,en;q=0.5").timeout(5000).execute();if (response.isOk()) {String result = response.body();// 创建ObjectMapper对象ObjectMapper mapper = new ObjectMapper();// 将JSON字符串转换成Payload对象Payload payload = mapper.readValue(result, Payload.class);topSkuInfoDTOS = (List<TopSkuInfoDTO>) payload.getPayload();}return topSkuInfoDTOS;
}

2.get 带参数

@SneakyThrows
@Override
public String getKeyByCode(String productCode) {String realUrl = url + "/open-api/v1/sku/replenish/getKeyByCode?productCode=" + productCode;HttpResponse response = HttpRequest.get(realUrl).header("User-Agent", "Mozilla/5.0").header("Accept-Language", "en-US,en;q=0.5").timeout(5000).execute();if (response.isOk()) {String result = response.body();// 创建ObjectMapper对象ObjectMapper mapper = new ObjectMapper();// 将JSON字符串转换成Payload对象Payload payload = mapper.readValue(result, Payload.class);return (String) payload.getPayload();}return null;
}

3.post 请求

@SneakyThrows
@Override
public String getUrl(String productCode, String productKey) {String realUrl = url + "/open-api/v1/cargoOffice/product/productDetails";ProductDetailsQuery query = new ProductDetailsQuery();query.setEmployeeCode("xxx");query.setApplication("xxx");query.setProductKey(productKey);query.setProductCode(productCode);query.setTimestamp(System.currentTimeMillis());query.setBrandDetailNo("xxx");query.setSecretId(this.secret);String secret = query.getEmployeeCode() + "cargoOffice" + query.getTimestamp() + this.secret;String secretStr = MD5Util.stringToMd5(secret);query.setSecret(secretStr);// 创建ObjectMapper对象ObjectMapper mapper = new ObjectMapper();String jsonStr = mapper.writeValueAsString(query);HttpResponse response = HttpRequest.post(realUrl).header("Content-Type", "application/json").body(jsonStr).execute();if (response.isOk()) {String result = response.body();// 将JSON字符串转换成Payload对象Payload payload = mapper.readValue(result, Payload.class);final Map map = (Map) payload.getPayload();return (String) map.get("url");}return null;
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

4款非常牛的Linux终端应用,thefuck尤其突出

这篇文章向大家介绍了4款非常棒且非常有用的Linux终端应用程序&#xff0c;可以使我们的日常命令操作更加高效。这些工具不仅可以让你在同事面前炫耀一番&#xff0c;而且它们还提供了实用且美观的功能。 第一款&#xff1a;thefuck 你是不是经常在终端敲错命令&#xff1f;敲…

Hdoop学习笔记(HDP)-Part.17 安装Spark2

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

专业视频剪辑利器Final Cut Pro for Mac,让你的创意无限发挥

在如今的数字时代&#xff0c;视频内容已经成为人们生活中不可或缺的一部分。无论是在社交媒体上分享生活点滴&#xff0c;还是在工作中制作专业的营销视频&#xff0c;我们都希望能够以高质量、高效率地进行视频剪辑和制作。而Final Cut Pro for Mac作为一款专业级的视频剪辑软…

CityEngine2023安装与快速入门

目录 0 引言1 安装2 基本操作3 CityEngine官方示例3.1 官方地址3.2 导入示例工程 3 结尾 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;CityEngine专栏&#x1f4a5; 标题&#xff1a;CityEngine2023安装与快速入门❣️ 寄语&#xff1a;书到用时…

22款奔驰S400L升级香氛负离子 车载香薰

香氛负离子系统是由香氛系统和负离子发生器组成的一套配置&#xff0c;也可以单独加装香氛系统或者是负离子发生器&#xff0c;香氛的主要作用就是通过香氛外壳吸收原厂的香水再通过空调管输送到内饰中&#xff0c;而负离子的作用就是安装在空气管中通过释放电离子来打击空气中…

postman参数为D:\\audio\\test.mp3请求报错

报错信息 报错 java.lang.IllegalArgumentException: Invalid character found in the request target [/v1/audio/transcriptions?audioPathD:\\audio\\test.mp3 ]. The valid characters are defined in RFC 7230 and RFC 3986 解决方式 yml文件上放行指定字符 relaxed-pa…

CentOS或RHEL安装code-server(vscode-web)

下载rpm安装包 网络下载或者下载到本地再上传到服务器&#xff0c;点击访问国内下载地址&#xff0c;不需要积分curl -fOL https://github.com/coder/code-server/releases/download/v4.19.1/code-server-4.19.1-amd64.rpm安装 rpm -i code-server-4.19.1-amd64.rpm关闭和禁用…

2022年4月12日 Go生态洞察:何时使用泛型 ️

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【嵌入式Linux程序开发综合实验】-1(附流程图) | ARM开发板 | 测试“Hello World” | Makefile文件 | 实现加法相加

任务&#xff1a;编写在标准输出终端输出“Hello World&#xff01;”的C语言代码以及输入指定数字相加结果、Makefile&#xff0c;并分别编译出在PC与ARM上运行的可执行程序文件。 设备以及工具 硬件&#xff1a;Linux开发板、PC机、串口连接线 图1 Linux开发板以及串口接线 …

LED屏幕信息安全如何预防?

随着科技的不断进步&#xff0c;LED屏幕在我们生活和工作中扮演着越来越重要的角色&#xff0c;然而&#xff0c;随之而来的是信息安全面临的挑战。为了有效预防LED屏幕信息的泄露和被盗取&#xff0c;我们需要采取一系列的安全措施。以下是一些建议&#xff1a; 物理安全措施&…

【 RTTI 】

RTTI 概念&#xff1a; RTTI(Run Time Type Identification)即通过运行时类型识别&#xff0c;程序能够使用基类的指针或引用来检 查着这些指针或引用所指的对象的实际派生类型。 原因&#xff1a; C是一种静态类 型语言。其数据类型是在编译期就确定的&#xff0c;不能在运…

【DPDK】Trace Library

概述 跟踪是一种用于了解运行中的软件系统中发生了什么的技术。用于跟踪的软件被称为跟踪器&#xff0c;在概念上类似于磁带记录器。记录时&#xff0c;放置在软件源代码中的特定检测点会生成保存在巨大磁带上的事件&#xff1a;跟踪文件。稍后可以在跟踪查看器中打开跟踪文件…