Современный HTTP-клиент
Использование встроенного HttpClient для чистых современных HTTP-запросов.
Сравнение кода
✕ Java 8
URL url = new URL("https://api.com/data");
HttpURLConnection con =
(HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
// read lines, close streams...
✓ Java 11+
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.com/data"))
.build();
var response = client.send(
request, BodyHandlers.ofString());
String body = response.body();
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Builder API
Текучий Builder для запросов, заголовков и таймаутов.
Поддержка HTTP/2
Встроенный HTTP/2 с мультиплексированием и Server Push.
Асинхронность
sendAsync() возвращает CompletableFuture.
Старый подход
HttpURLConnection
Современный подход
HttpClient
Начиная с JDK
11
Сложность
Начинающий
Поддержка JDK
Современный HTTP-клиент
Доступно
Доступно в JDK 11 (сент. 2018)
Как это работает
HttpClient поддерживает HTTP/1.1 и HTTP/2, асинхронные запросы, WebSocket, пользовательские исполнители и пул соединений. Больше не нужно приводить URLConnection или вручную читать потоки InputStream.
Связанная документация
Доказательство