在Java 11中,已将最初在Java 9中引入的孵化HTTP客户端API进行了标准化。 它使连接URL,管理请求参数,cookie和会话更加容易,甚至支持异步请求和websocket。
回顾一下,这是使用传统的URLConnection
方法从URL读取的方式:
var url = new URL("http://www.google.com");
var conn = url.openConnection();
try (var in = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {in.lines().forEach(System.out::println);
}
这里是您可以如何使用HttpClient
:
var httpClient = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(URI.create("http://www.google.com")).build();
var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
HTTP客户端API还通过sendAsync
方法支持异步请求,该方法返回CompletableFuture
,如下所示。 这意味着执行请求的线程不必等待I / O完成,并且可以用于运行其他任务。
var httpClient = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(URI.create("http://www.google.com")).build();
httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(System.out::println);
从文件发出包含JSON的POST请求也非常容易:
var httpClient = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(URI.create("http://www.google.com")).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofFile(Paths.get("data.json"))).build();
翻译自: https://www.javacodegeeks.com/2018/12/java-11-new-http-client-api.html