HTTP-Client für Java: Überblick über die Top-Bibliotheken
In der modernen Java-Entwicklung kommt kaum eine Anwendung ohne Interaktion über das HTTP-Protokoll aus. Das Senden von Anfragen an REST-APIs, das Herunterladen von Dateien, die Arbeit mit Microservices – all das erfordert einen zuverlässigen und benutzerfreundlichen HTTP-Client. In diesem Artikel betrachten wir die vier beliebtesten Bibliotheken für die Arbeit mit HTTP in Java: den standardmäßigen HttpClient (Java 11+), Apache HttpClient, OkHttp und Retrofit. Sie erfahren deren Besonderheiten, Stärken und erhalten praktische Codebeispiele.
1. Java 11 HttpClient (java.net.http)
Ab Java 11 wurde der Standardbibliothek ein moderner HTTP-Client hinzugefügt, der den veralteten HttpURLConnection ersetzen soll. Er unterstützt HTTP/2, WebSocket, asynchrone Anfragen und reaktive Streams.
Vorteile:
- Erfordert keine zusätzlichen Abhängigkeiten – im JDK integriert.
- Unterstützung von HTTP/2 und automatische Protokollaktualisierung.
- Bequeme API mit synchronen und asynchronen Aufrufen.
- Integrierte Unterstützung für Cookie-Verarbeitung, Weiterleitungen und Authentifizierung.
Beispiel einer synchronen GET-Anfrage:
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()); }}Beispiel einer asynchronen POST-Anfrage:
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
Die klassische Bibliothek von Apache, die lange Zeit der De-facto-Standard war. Die neueste Version (5.x) erhielt bedeutende Verbesserungen: Unterstützung von HTTP/2, verbesserte Verbindungspool-Verwaltung und flexiblere Konfiguration.
Vorteile:
- Maximale Flexibilität und Feineinstellung (Timeouts, Interceptors, Caching).
- Bewährte Stabilität.
- Unterstützung verschiedener Authentifizierungsschemata (Basic, Digest, NTLM).
- Gute Integration mit Proxy und SSL.
Beispiel einer GET-Anfrage mit 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 Auch in der Bibliothek
Arbeiten mit CSV in Kotlin: Bibliotheken und Codebeispiele
SMS-Versand mit Java: Überblick über API-Bibliotheken (Twilio, Nexmo, SMS-Gateways)
Rust-Anwendungsüberwachung: Die Bibliothek `tracing`
Datenvalidierung in Java: Überblick über Bibliotheken und Ansätze