Z
ZHANK
网络编程

HTTP 客户端

使用 HttpClient 发送 GET/POST 请求、处理 JSON 响应

HTTP 客户端

Java 11+ 内置的 HttpClient 让 HTTP 请求变得简单。

学完本章你将: 发送 GET/POST 请求、处理 JSON 响应。


GET 请求

java
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
    .GET()
    .build();

HttpResponse<String> response = client.send(request,
    HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode());  // 200
System.out.println(response.body());         // JSON 字符串

POST 请求(发送 JSON)

java
String json = """
    {
        "title": "Hello",
        "body": "This is a test post",
        "userId": 1
    }
    """;

HttpRequest postRequest = HttpRequest.newBuilder()
    .uri(URI.create("https://jsonplaceholder.typicode.com/posts"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(json))
    .build();

HttpResponse<String> postResp = client.send(postRequest,
    HttpResponse.BodyHandlers.ofString());
System.out.println(postResp.statusCode()); // 201

异步请求

java
// sendAsync 不阻塞
CompletableFuture<HttpResponse<String>> future = client
    .sendAsync(request, HttpResponse.BodyHandlers.ofString());

future.thenAccept(resp -> {
    System.out.println("状态: " + resp.statusCode());
    System.out.println("内容: " + resp.body());
}).join();

请求配置

java
HttpClient client = HttpClient.newBuilder()
    .connectTimeout(Duration.ofSeconds(10))
    .followRedirects(HttpClient.Redirect.NORMAL)
    .build();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/data"))
    .timeout(Duration.ofSeconds(5))
    .header("Authorization", "Bearer token123")
    .header("Accept", "application/json")
    .GET()
    .build();