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

news2024/11/17 6:26:58

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
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.coloradmin.cn/o/1276769.html

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

相关文章

医院智能导诊小程序源码 智能导诊源码

医院智能导诊系统、AI智能导诊、现有的ai模型做医院智能导诊、智能就医引导系统、人工智能挂号、医院AI全流程智能导诊系统。 智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述…

springboot集成邮箱验证功能

准备工作 开启SMTP服务 前往你的邮箱网站&#xff0c;以网易邮箱为例&#xff0c;打开网易邮箱地址&#xff0c;登录你的邮箱&#xff0c;进入邮箱管理后台界面。点击“设置”》》“POP3/SMTP/IMAP”后&#xff0c;点击开启SMTP服务即可。 技术实现 Spring Boot 发送邮件验证…

2022年4月19日 Go生态洞察:Go开发者调查2021结果分析

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

Hdoop学习笔记(HDP)-Part.20 安装Flume

目录 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 …

抑郁症中西医治疗对比?

抑郁症是一种常见的心理障碍&#xff0c;治疗方法包括中医和西医两种。下面就抑郁症中西医治疗进行对比&#xff1a; 治疗方法&#xff1a;中医治疗抑郁症强调整体观念和辨证论治&#xff0c;通过调理身体各部分的功能&#xff0c;达到治疗抑郁症的目的。中医治疗抑郁症多采用天…

自然语言处理 (NLP) 中的组合语义分析

埃弗顿戈梅德&#xff08;Everton Gomede&#xff09; 一、介绍 自然语言处理 &#xff08;NLP&#xff09; 中的组合语义分析是一个引人入胜且复杂的话题。为了充分理解它&#xff0c;将这个概念分解成它的基本组成部分是至关重要的&#xff1a;组合语义及其在NLP中的应用。组…

xilinx系列FPGA基于VIVADO的pin delay列表生成说明

目录 1 概述2 示例平台3 操作说明4 注意事项 xilinx系列FPGA基于VIVADO的pin delay列表生成说明 1 概述 本文用于讲诉xilinx系列FPGA基于VIVADO的pin delay列表生成说明&#xff0c;以及一些注意事项&#xff0c;为FPGA设计人员探明道路。 Pin delay 即FPGA内部die到pin的延时…

mysql数据库的字符集和字符校对规则

所谓字符集就是字符的编码&#xff0c;是怎么保存的&#xff0c;例如UTF-8。 所谓字符校对规则是指按照什么规则来比较字符&#xff0c;打个简单的比方&#xff0c;比较字符A和a的时候&#xff0c;忽略大小写&#xff0c;这就是一条规则。 详情可以查询mysql官网&#xff1a;h…

停止在 TypeScript 中使用 any 类型

停止在 TypeScript 中使用 any 类型 TypeScript 是 Web 开发人员中最常用的编程语言之一。它具有出色的语言功能&#xff0c;允许我们轻松设计可扩展的应用程序。因此&#xff0c;开发人员倾向于在项目中选择 TypeScript 而不是 JavaScript。 然而&#xff0c;在使用 TypeScr…

阿里云开源通义千问720亿参数模型,性能超越大部分商用闭源大模型

12月1日&#xff0c;阿里云举办通义千问发布会&#xff0c;开源通义千问720亿参数模型Qwen-72B。Qwen-72B在10个权威基准测评创下开源模型最优成绩&#xff0c;成为业界最强开源大模型&#xff0c;性能超越开源标杆Llama 2-70B和大部分商用闭源模型。未来&#xff0c;企业级、科…

【Python表白系列】玫瑰花的浪漫告白(完整代码)

文章目录 玫瑰花环境需求完整代码普通玫瑰花三维玫瑰花多彩玫瑰花系列文章玫瑰花 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭…

Elasticsearch:什么是自然语言处理(NLP)?

自然语言处理定义 自然语言处理 (natural language processing - NLP) 是人工智能 (AI) 的一种形式&#xff0c;专注于计算机和人们使用人类语言进行交互的方式。 NLP 技术帮助计算机使用我们的自然交流模式&#xff08;语音和书面文本&#xff09;来分析、理解和响应我们。 自…

京东数据运营-京东数据开放平台-鲸参谋10月粮油调味市场品牌店铺销售数据分析

鲸参谋监测的京东平台10月份料油调味市场销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台粮油调味市场的销量将近4600万&#xff0c;环比增长约10%&#xff0c;同比降低约20%&#xff1b;销售额将近19亿&#xff0c;环比增长约4%&am…

数据结构—二叉树

文章目录 10.二叉树(1).二叉树的基本概念(2).遍历#1.前序遍历#2.中序遍历#3.后序遍历#4.非递归中序遍历 (3).中序前/后序建树#1.中序前序遍历建树#2.中序后序遍历建树 (4).递归和二叉树基本操作#1.求树高#2.求结点数#3.求叶子结点数#4.复制树#5.判断两棵树是否相等 (5).特殊二叉…

Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

1、背景 集群配置为&#xff1a;8 个 node 节点&#xff0c;16 核 32G&#xff0c;索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高&#xff0c;search 没有慢查询的状态。 2、集群压测性能不能上去&#xff0c;cpu 使用未打…

VSC++=》 友数对友质数()

void 友数对友质数() {//缘由https://bbs.csdn.net/topics/396498706?page1#post-411382586int aa 2, aaa 20; while (aa * aaa < 119)if (判断质数(aa * aaa - 1))cout << aa << ends << aaa << ends << (aa*aaa - 1) << endl, aaa…

JavaFramework JDK Version Test

测试JDK8 JDK17编译包 当前环境JDK8 CASE 1&#xff1a; /*** * author ZengWenFeng* email 117791303QQ.com* mobile 13805029595* date 2023-08-07*/ package zwf;import a.T; import ce.pub.util.GUID;/*** 测试高版本JDK编译JAR&#xff0c;低版本错误** author ZengWenF…

C++作业2

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() 代码&#xff1a…

FastAPI中如何调用同步函数

目录 一、使用app.sync装饰器 二、使用asyncio.run()函数 三、使用background参数 四、注意事项 总结 FastAPI是一个基于Python 3.6的快速Web框架&#xff0c;用于构建高效、可扩展的Web应用程序。在FastAPI中&#xff0c;可以使用同步函数来处理请求并返回响应。本文将介…

Unity 与 虚拟机ROS连接

Unity 与 虚拟机ROS连接 知识储备前期准备ROS部分Unity部分 连接测试 知识储备 unity官方教程&#xff1a; https://github.com/Unity-Technologies/Unity-Robotics-HubWin11家庭版开启HyperV&#xff1a; https://zhuanlan.zhihu.com/p/577980646HyperV安装Ubuntu: https://b…