HTTP-клиент для Java: топ библиотек для работы с HTTP
Современная Java-разработка редко обходится без взаимодействия с удалёнными серверами по протоколу HTTP. Будь то вызов REST API, загрузка файлов или интеграция с микросервисами — разработчику необходим надёжный и удобный HTTP-клиент. В этой статье мы рассмотрим три ведущие библиотеки для Java: OkHttp, Apache HttpClient и встроенный Java HttpClient (начиная с Java 11). Вы узнаете их особенности, увидите примеры кода и поймёте, какую библиотеку выбрать для своего проекта.
1. Java HttpClient (встроенный, Java 11+)
Начиная с Java 11, в стандартной библиотеке появился современный HTTP-клиент, который пришёл на смену устаревшему HttpURLConnection. Он поддерживает HTTP/2, WebSocket, асинхронные запросы и реактивные потоки.
Особенности:
- Не требует дополнительных зависимостей — входит в JDK.
- Поддержка синхронных (
send) и асинхронных (sendAsync) вызовов. - Работа с HTTP/2 и автоматическое понижение до HTTP/1.1.
- Встроенная поддержка WebSocket.
- Удобная работа с телом запроса через
BodyPublishersи ответа черезBodyHandlers.
Пример: GET-запрос
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class JavaHttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.github.com/users/octocat")) .GET() .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("Status: " + response.statusCode()); System.out.println("Body: " + response.body()); }}Пример: асинхронный POST-запрос
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 AsyncPostExample { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://jsonplaceholder.typicode.com/posts")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString("{\\"title\\":\\"foo\\",\\"body\\":\\"bar\\",\\"userId\\":1}")) .build();
CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); future.thenAccept(response -> { System.out.println("Status: " + response.statusCode()); System.out.println("Response: " + response.body()); }).join(); }}2. OkHttp (Square)
OkHttp — одна из самых популярных библиотек для Android и Java. Она славится высокой производительностью, автоматическим управлением соединениями и поддержкой HTTP/2 и SPDY. OkHttp используется внутри Retrofit и Picasso.
Особенности:
- Поддержка HTTP/2 и автоматическое мультиплексирование запросов.
- Встроенный пул соединений и повторное использование сокетов.
- Прозрачная обработка GZip-сжатия.
- Поддержка перехватчиков (interceptors) для логирования, аутентификации и ретраев.
- Простые и fluent-подобные строители запросов.
Подключение (Maven):
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.