Client HTTP pour Java : aperçu des meilleures bibliothèques
Dans le développement Java moderne, presque aucune application ne se passe d'interaction via le protocole HTTP. L'envoi de requêtes à une API REST, le téléchargement de fichiers, le travail avec des microservices — tout cela nécessite un client HTTP fiable et pratique. Dans cet article, nous examinerons les quatre bibliothèques les plus populaires pour travailler avec HTTP en Java : le HttpClient standard (Java 11+), Apache HttpClient, OkHttp et Retrofit. Vous découvrirez leurs caractéristiques, leurs points forts et obtiendrez des exemples pratiques de code.
1. Java 11 HttpClient (java.net.http)
Depuis Java 11, un client HTTP moderne a été ajouté à la bibliothèque standard, destiné à remplacer l'ancien HttpURLConnection. Il prend en charge HTTP/2, WebSocket, les requêtes asynchrones et les flux réactifs.
Avantages :
- Ne nécessite aucune dépendance supplémentaire — intégré au JDK.
- Prise en charge de HTTP/2 et mise à niveau automatique du protocole.
- API pratique avec appels synchrones et asynchrones.
- Prise en charge intégrée de la gestion des cookies, des redirections et de l'authentification.
Exemple de requête GET synchrone :
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class Java11HttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1")) .GET() .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("Status code: " + response.statusCode()); System.out.println("Body: " + response.body()); }}Exemple de requête POST asynchrone :
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpRequest.BodyPublishers;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(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("Body: " + response.body()); }).join(); }}2. Apache HttpClient
La bibliothèque classique d'Apache, qui a longtemps été le standard de facto. La dernière version (5.x) a reçu des améliorations significatives : prise en charge de HTTP/2, meilleure gestion du pool de connexions et configuration plus flexible.
Avantages :
- Flexibilité maximale et réglage fin (timeouts, intercepteurs, mise en cache).
- Stabilité éprouvée par le temps.
- Prise en charge de différents schémas d'authentification (Basic, Digest, NTLM).
- Bonne intégration avec les proxys et SSL.
Exemple de requête GET avec Apache HttpClient 5 :
import org.apache.hc.client5.http.classic.methods.HttpGet;import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;import org.apache.hc.client5.http.impl.classic.Clos Aussi dans la bibliothèque
Rate Limiting en JavaScript (Node.js) : Guide complet de la bibliothèque express-rate-limit
Jasypt Java : guide complet avec exemples de chiffrement
Ardalis.SmartEnum pour C# (.NET) : guide complet avec exemples
Cheerio pour JavaScript (Node.js) : guide complet avec exemples