在Java中,你可以使用CompletableFuture
和HttpClient
来实现异步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 CompletableFutureresponseFuture = 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 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
。这个方法使用HttpClient.sendAsync
发起异步请求,并将响应体转换为字符串。
在main
方法中,我们调用sendAsyncGetRequest
方法,并使用thenAccept
和exceptionally
方法处理响应和异常。最后,我们使用join
方法阻塞主线程,直到异步请求完成。