HTTP Client for Java: Top Libraries for Working with HTTP

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

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.                    

Recommendations