SpringBoot使用hutool发起http请求

564 阅读2分钟

hutool简介

  • 时间格式化,时间转换,时间校验
  • http 接口调用
  • 字符串格式化处理
  • ........

post请求

 String url = "http://192.168.15.21:6012/Query/getDevList";
    Map<String, String> map = new HashMap<>(10);
    map.put("condition", "{page:1,rows:100,StationName:\"\",Online:1}");
    Map<String, String> mapHeader = new HashMap<>(10);
    mapHeader.put("Content-Type", "application/json");
    String json = JSONUtil.toJsonStr(map);
    List<SepticTankInfoAllVO> septicTankAlarmInfos = new ArrayList<>();
    try {
        String val = HttpUtil.createPost(url)
                .addHeaders(mapHeader)
                .body(json)
                .execute()
                .body();
        septicTankAlarmInfos = JSON.parseArray(val,SepticTankInfoAllVO.class);
    } catch (Exception e) {

    }
    return septicTankAlarmInfos;
}

get请求

String url = "http://192.168.15.21:6010/Query/getAlarmList";
Map<String, String> map = new HashMap<>(10);
map.put("StartTime", "2021-01-09 00:36:46");
map.put("EndTime", "2022-12-14 22:46:45");
List<GetSepticTankAlarmInfoVO> septicTankAlarmInfos = new ArrayList<>();
try {
    String val = HttpUtil.createGet(url).timeout(1000).addHeaders(map).execute().body();
    septicTankAlarmInfos = JSON.parseArray(val,GetSepticTankAlarmInfoVO.class);
} catch (Exception e) {

}
return septicTankAlarmInfos;

注意

Hutool 3.1.0 版本中引入了 HttpClient 类,它基于 Apache HttpComponents 构建,支持 TCP 连接复用。因此,如果你使用的是 Hutool 3.1.0 或更高版本,则可以使用 HttpClient 来避免大量 TIME_WAIT 状态的 TCP 连接。

TCP 连接复用

TCP 连接复用是指在客户端和服务器之间建立一个持久的连接,并在此连接上发送和接收多个请求/响应。这可以避免为每个请求/响应建立和关闭新的 TCP 连接,从而提高性能。

HttpURLConnection

HttpURLConnection 是 Java 中用于发送 HTTP 请求的类。它不会自动进行 TCP 连接复用。这意味着对于每个 HTTP 请求,它都会建立一个新的 TCP 连接,并在请求完成后关闭该连接。

大量 TIME_WAIT 状态的 TCP 连接

HttpURLConnection 关闭一个 TCP 连接时,该连接会进入 TIME_WAIT 状态。在此状态下,连接仍会占用系统资源,直到其超时(通常为 2 分钟)。

如果在短时间内发送大量 HTTP 请求,则会导致大量 TIME_WAIT 状态的 TCP 连接。这可能会导致性能问题,因为系统资源被耗尽。