Java HTTP Client:现代 API 调用
学习使用 java.net.http 包中的 HttpClient、HttpRequest 和 HttpResponse 发送同步/异步请求。 · 难度:入门 · +15XP
Java 11 引入的新 HTTP Client
替代了古老的 HttpURLConnection,支持 HTTP/2、WebSocket 和异步非阻塞调用,API 设计更流畅。
基本用法
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
异步请求
CompletableFuture<HttpResponse<String>> future =
client.sendAsync(request, BodyHandlers.ofString());
future.thenAccept(response -> {
System.out.println(response.body());
});POST 请求与 JSON
String json = """{"name":"Alice"}""";
HttpRequest postRequest = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();超时与重定向
| 配置 | 方法 |
|---|---|
| 连接超时 | HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)) |
| 跟随重定向 | .followRedirects(HttpClient.Redirect.NORMAL) |
| 自定义 Executor | .executor(Executors.newFixedThreadPool(4)) |
练习提示
在 starter_code 中,创建一个 GET 请求访问 https://httpbin.org/get 并打印响应状态码和 body。