HTTP 调用是日常开发里最常见的能力之一。不同场景适合不同工具:命令行排查用 curl,Java 服务里可以用 OkHttp、HttpClient、RestTemplate 或 Hutool。
curl 适合快速排查
curl 最大的优点是快。比如查看网页链路耗时:
curl -o /dev/null -s -w "%{time_namelookup}:%{time_connect}:%{time_starttransfer}:%{time_total}\n" https://example.com
这几个指标大概对应:
- DNS 解析。
- TCP 连接。
- 首包时间。
- 总耗时。
当你想知道问题在 DNS、网络、服务端处理还是下载阶段时,这条命令很有用。
Java 里有哪些选择
Java 里常见 HTTP 调用方式包括:
HttpURLConnection。- Apache
HttpClient。 CloseableHttpClient。- OkHttp。
- RestTemplate。
- Hutool
HttpUtil。
它们都能发请求,但适用场景不同。
简单脚本和临时工具
如果只是临时脚本、小工具或一次性请求,Hutool HttpUtil 这类封装会很方便。
但要注意:
- 超时时间。
- 错误处理。
- 响应编码。
- 日志脱敏。
- 是否需要连接池。
临时代码很容易变成长期代码,所以基本边界也要写清楚。
服务端长期调用
如果是服务端长期调用第三方接口,更建议使用成熟客户端并做封装。
封装里至少要处理:
- 连接超时。
- 读取超时。
- 重试策略。
- 连接池。
- 统一日志。
- 错误码转换。
- 请求和响应脱敏。
- 熔断或限流。
HTTP 调用失败不应该把底层异常原样丢给业务层。
RestTemplate 的位置
在 Spring 项目里,RestTemplate 曾经非常常见。现在新项目可能会更多考虑 WebClient 或其他客户端,但老项目里 RestTemplate 仍然很常见。
维护老项目时,要关注:
- 是否配置超时。
- 是否复用连接。
- 是否统一异常处理。
- 是否记录请求耗时。
选择建议
可以这样选:
- 命令行排查:curl。
- Java 临时小工具:Hutool 或简单封装。
- 服务端长期调用:OkHttp、HttpClient 或项目统一客户端。
- Spring 老项目:看现有 RestTemplate 封装。
- 高并发调用:重点看连接池、超时和监控。
HTTP 工具本身不难,难的是把超时、错误、日志和安全边界处理好。
正文完




