温馨提示×

java http怎样实现异步请求

小樊
81
2024-11-15 18:29:08
栏目: 编程语言

在Java中,你可以使用CompletableFutureHttpClient来实现异步HTTP请求。下面是一个简单的示例,展示了如何使用这些工具发起异步GET请求:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

public class AsyncHttpRequest {
    public static void main(String[] args) {
        HttpClient httpClient = HttpClient.newHttpClient();
        String url = "https://api.example.com/data"; // 替换为你要请求的URL

        CompletableFuture<String> responseFuture = sendAsyncGetRequest(httpClient, url);

        // 在响应到达之前执行其他操作
        responseFuture.thenAccept(response -> {
            System.out.println("Response: " + response);
        }).exceptionally(error -> {
            System.err.println("Error: " + error.getMessage());
            return null;
        });

        // 阻塞主线程,直到异步请求完成
        responseFuture.join();
    }

    private static CompletableFuture<String> sendAsyncGetRequest(HttpClient httpClient, String url) {
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .GET()
                .build();

        return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
                .thenApply(HttpResponse::body);
    }
}

在这个示例中,我们首先创建了一个HttpClient实例。然后,我们定义了一个sendAsyncGetRequest方法,该方法接受HttpClient和URL作为参数,并返回一个CompletableFuture<String>。这个方法使用HttpClient.sendAsync发起异步请求,并将响应体转换为字符串。

main方法中,我们调用sendAsyncGetRequest方法,并使用thenAcceptexceptionally方法处理响应和异常。最后,我们使用join方法阻塞主线程,直到异步请求完成。

0