Недавно в свет вышел новый JEP 321, целью которого является стандартизация клиента для работы с HTTP в Java. Этот клиент уже присутствует в JDK 9, однако он находится в инкубированном модуле jdk.incubator.httpclient, т.е. имеет статус экспериментального API, который может измениться в будущем. Когда JEP будет реализован, инкубированный модуль будет перенесён в стандартный модуль java.net.httpclient, а сам инкубированный модуль будет удалён.
Пример кода с использованием HttpClient:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("http://example.org"))
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
Новый HTTP-клиент начал разрабатываться в 2014 году, когда стало ясно, что устаревший класс HttpURLConnection, который появился ещё в JDK 1.1, более не отвечает современным требованиям: он неудобен в использовании, не поддерживает HTTP/2 и веб-сокеты, работает только в блокирующем режиме, а также его очень трудно поддерживать. Новый HTTP-клиент решает все эти проблемы и предоставляет более удобный и современный API. После введения в JDK 9 в качестве инкубированного модуля он был практически полностью переписан и значительно улучшен.
В какой релиз попадёт новый стандартный HTTP-клиент, пока ещё неизвестно. В Java 10 он попасть не успеет, поэтому, скорее всего, попадёт в Java 11.