在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
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
方法,并使用thenAccept
和exceptionally
方法处理响应和异常。最后,我们使用join
方法阻塞主线程,直到异步请求完成。