<dependency>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpclientartifactId>
<version>4.5.13version>
dependency>
// 直接调用 java.net.http.HttpClient
// Java 11+ 标准库版
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("状态码:" + response.statusCode());
System.out.println("响应体:" + response.body());
// 发送JSON数据(附赠护体结界)
String jsonBody = "{\"name\":\"张三\",\"age\":25}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5)) // 连接超时
.followRedirects(HttpClient.Redirect.NORMAL) // 自动重定向
.version(HttpClient.Version.HTTP_2) // 启用HTTP/2
.build();
HttpRequest request = HttpRequest.newBuilder()
.header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)")
.header("Accept-Language", "zh-CN,zh;q=0.9")
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.exceptionally(e -> {
System.err.println("渡劫失败:" + e.getMessage());
return null;
});
// 主线程可继续执行其他任务
// 构建multipart/form-data
String boundary = "----WebKitFormBoundary" + System.currentTimeMillis();
HttpRequest request = HttpRequest.newBuilder()
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
.POST(ofMimeMultipartData(
Map.of("name", "张三", "file", Path.of("report.pdf")),
boundary))
.build();
// 需要自定义BodyPublisher(代码略长,建议封装工具类)
HttpClient client = HttpClient.newBuilder()
.sslContext(insecureSSLContext()) // 自定义信任所有证书
.build();
// 信任所有证书方法(测试环境专用!)
private static SSLContext insecureSSLContext() throws Exception {
TrustManager[] trustAll = new TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
}};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAll, new SecureRandom());
return sc;
}
try {
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
if (response.statusCode() >= 400) {
System.err.println("请求异常:" + response.body());
}
} catch (IOException e) {
System.err.println("IO异常:" + e.getMessage());
} catch (InterruptedException e) {
System.err.println("请求中断:" + e.getMessage());
Thread.currentThread().interrupt();
}
// Apache HttpClient配置
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200); // 最大连接数
cm.setDefaultMaxPerRoute(20); // 单路由最大连接
CloseableHttpClient client = HttpClients.custom()
.setConnectionManager(cm)
.build();
HttpRequest request = HttpRequest.newBuilder()
.header("Accept-Encoding", "gzip, deflate") // 启用压缩
.build();
// 自动解压响应(Java HttpClient默认支持)
飞升后选择: