目录
一、前言介绍
二、主要特点
三、功能用法
四、应用场景
五、最佳实践
六、总结归纳
一、前言介绍
HttpClient 是一个用于发送 HTTP 请求和接收 HTTP 响应的客户端库,广泛应用于 Web 开发、API 调用、微服务通信等场景。
二、主要特点
-
支持多种HTTP方法:GET、POST、PUT、DELETE等
-
异步操作:支持异步请求模式
-
请求/响应处理:可自定义请求头和读取响应内容
-
连接管理:支持连接池和持久连接
三、功能用法
1. 基本 HTTP 请求
HttpClient 支持所有 HTTP 方法,包括:
-
GET:获取资源
-
POST:提交数据
-
PUT:更新资源
-
DELETE:删除资源
-
PATCH:部分更新
示例(GET & POST 请求):
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;// 创建 HttpClient
HttpClient client = HttpClient.newHttpClient();// GET 请求
HttpRequest getRequest = HttpRequest.newBuilder().uri(URI.create("https://jsonplaceholder.typicode.com/posts/1")).build();
HttpResponse<String> getResponse = client.send(getRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(getResponse.body());// POST 请求(提交 JSON 数据)
String postData = "{\"title\":\"foo\", \"body\":\"bar\", \"userId\":1}";
HttpRequest postRequest = HttpRequest.newBuilder().uri(URI.create("https://jsonplaceholder.typicode.com/posts")).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(postData)).build();
HttpResponse<String> postResponse = client.send(postRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(postResponse.body());
2. 高级功能
-
自定义请求头(如 `Authorization`、`User-Agent`)
-
超时控制(避免请求长时间阻塞)
-
代理设置(适用于企业内网环境)
-
文件上传/下载(支持 `MultipartFormData`)
-
Cookie 管理(适用于需要会话保持的场景)
// 设置请求头
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/data")).header("Authorization", "Bearer token123").header("User-Agent", "MyApp/1.0").timeout(Duration.ofSeconds(10)).build();
四、应用场景
1.Web API 调用
-
调用 RESTful API(如 GitHub API、Twitter API)
-
与后端服务交互(如微服务架构中的服务间通信)
2.爬虫 & 数据抓取
-
爬取网页内容(如新闻、电商数据)
-
自动化测试(模拟 HTTP 请求)
3.文件上传/下载
-
上传图片、视频到云存储(如 AWS S3、阿里云 OSS)
-
下载远程文件(如 PDF、Excel 报表)
4.身份认证 & OAuth
-
使用 `Bearer Token` 访问受保护的 API
-
实现 OAuth 2.0 授权流程
五、最佳实践
1.使用单例模式(避免频繁创建)
- HttpClient 内部管理 TCP 连接,频繁创建会导致性能问题。
// Java 11+ 的 HttpClient 是线程安全的
HttpClient client = HttpClient.newHttpClient();
2.设置合理的超时时间
- 避免因网络问题导致线程阻塞。
// Java 示例
HttpRequest request = HttpRequest.newBuilder().timeout(Duration.ofSeconds(30)).build();
3.异常处理
- 网络异常(如 `HttpRequestException`)
- HTTP 错误状态码(如 404、500)
try {HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());if (response.statusCode() >= 400) {System.err.println("请求失败: " + response.statusCode());} else {System.out.println(response.body());}
} catch (IOException | InterruptedException ex) {System.err.println("请求异常: " + ex.getMessage());
}
4.使用 `using` 或 `try-with-resources` 释放资源
- 避免内存泄漏(特别是在 Java 中)。
try (HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString())) {System.out.println(response.body());
}
六、总结归纳
方面 | 关键点 |
---|---|
功能 | 支持 GET/POST/PUT/DELETE、自定义 Header、超时控制、文件上传/下载 |
应用场景 | API 调用、爬虫、微服务通信、文件传输 |
最佳实践 | 单例模式、超时设置、异常处理、资源释放 |
-
HttpClient 是现代化 HTTP 通信的核心工具,合理使用可以提升应用的稳定性和性能。