Недавно в свет вышел новый 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.