# 一.基本介绍

# 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
2
3
4
5
  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
2
3
4
5
6
7
8
9
10
11

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

# 二.实战案例

# 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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
上次更新: 10/29/2024, 10:27:50 AM