温馨提示×

java http怎样实现异步请求

小樊
248
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