HTTP协议编程
HTTP协议基础
flowchart TD
HTTP协议[HTTP协议]
HTTP协议 --> 请求方法
HTTP协议 --> 状态码
HTTP协议 --> 首部字段
HTTP协议 --> 报文结构
核心API
// HttpURLConnection
URL url = new URL("http://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
// HttpClient (Java 11+)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://example.com"))
.build();
HTTP客户端实现
// 使用HttpURLConnection
public static String get(String urlStr) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try (BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream()))) {
return in.lines().collect(Collectors.joining());
}
}
// 使用HttpClient
public static String getWithHttpClient(String url) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
return response.body();
}
连接池管理
// 创建连接池
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200); // 最大连接数
cm.setDefaultMaxPerRoute(20); // 每个路由最大连接数
// 配置HttpClient
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.build();
性能优化
- 启用连接复用
- 合理设置超时时间
- 使用GZIP压缩
- 批量请求合并
- 异步非阻塞IO