# 一.基本介绍
# 1.hutool http 优点
- 简化了 HTTP 请求的操作,提供了丰富的 API 和工具类,方便处理 HTTP 请求和响应。
- 支持多种常见的 HTTP 请求方法,如 GET、POST、PUT、DELETE 等。
- 支持设置请求头、请求参数、请求体等。
- 提供了便捷的方法来处理 HTTP 响应,包括获取响应状态码、响应头、响应体等。
- 支持文件上传和下载功能,可以方便地进行文件的上传和下载操作。
- 提供了 Cookie 的操作方法,可以方便地处理 Cookie 相关的操作。
- 支持 HTTP 代理和 SSL/TLS 的配置。
- 集成了连接池,可以提高 HTTP 请求的性能和效率。
- 提供了异常处理机制,方便处理 HTTP 请求过程中出现的异常情况。
- 支持自定义拦截器,可以对 HTTP 请求进行拦截和处理。
hutool 的 HTTP 模块提供了简单、方便、灵活的方式来处理 HTTP 请求和响应,使得开发者可以更加轻松地进行网络通信相关的操作。
# 2.注意事项
hutool http 库的注意事项:
- 需要添加 hutool-http 依赖:在使用 hutool http 库之前,需要在项目的依赖中添加 hutool-http 的依赖项。
- 注意异常处理:在发送 HTTP 请求时,可能会出现网络连接异常、超时等问题,需要适当处理这些异常,以确保程序的稳定性。
- 注意请求参数的编码:在发送 POST 请求时,如果包含中文或特殊字符,需要正确设置请求参数的编码,以避免乱码或解析错误。
- 注意使用合适的 HTTP 方法:根据实际需求选择合适的 HTTP 方法,例如 GET 用于获取资源、POST 用于创建资源、PUT 用于更新资源、DELETE 用于删除资源等。
- 注意请求头的设置:根据需要设置合适的请求头,包括 Content-Type、User-Agent、Authorization 等。
- 注意请求体的设置:对于 POST 或 PUT 请求,需要根据接口要求设置请求体的内容和格式。
- 注意数据安全:在发送 HTTP 请求时,特别是涉及用户敏感信息的场景,需要注意数据的加密和安全性。
# 3.基本使用步骤
以下是使用 Hutool 进行 HTTP 请求的基本步骤:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
<version>5.7.10</version>
</dependency>
1
2
3
4
5
2
3
4
5
- 添加 Hutool 依赖:在项目的构建文件中添加 Hutool 的依赖,例如在 Maven 项目中,在 pom.xml 文件中添加以下依赖:
- 创建 HttpUtil 对象:通过
HttpUtil.createRequest(url)
方法创建一个 HttpUtil 对象,其中url
是要请求的 URL 地址。 - 设置请求参数:通过
setXXX
方法设置请求的参数,例如设置请求头、请求方法、请求体等。 - 发送请求:调用
execute()
方法发送请求。 - 处理响应:获取响应结果,可以通过
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
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
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
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
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