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

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

  • 推荐: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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

【高效开发工具系列】Hutool Http工具类_网络协议_02