HTTP-Client für Java: Top-Bibliotheken für HTTP-Anfragen
Moderne Java-Entwicklung ist ohne die Interaktion mit externen Diensten über HTTP nicht denkbar. Ob REST-API, Webhooks oder Dateidownloads – ein qualitativ hochwertiger HTTP-Client ist die Grundlage jeder Netzwerkanwendung. In diesem Artikel analysieren wir die vier besten Bibliotheken für Java: vom klassischen Apache HttpClient bis zum modernen Retrofit. Sie erfahren ihre Stärken, typische Anwendungsszenarien und sehen Codebeispiele.
1. Apache HttpClient (Apache HttpComponents)
Dies ist wohl die bekannteste und ausgereifteste Bibliothek für HTTP in Java. Sie wird seit 2004 entwickelt, unterstützt HTTP/1.1 und HTTP/2, flexible Konfiguration des Verbindungspools, Proxys, Authentifizierung und Request-Interceptor. Ideal für serverseitige Anwendungen mit hohen Anforderungen an die Anpassbarkeit.
Beispiel einer GET-Anfrage:
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.HttpClients;
try (CloseableHttpClient client = HttpClients.createDefault()) { HttpGet request = new HttpGet("https://api.example.com/data"); String response = client.execute(request, classicHttpResponse -> { return new String(classicHttpResponse.getEntity().getContent().readAllBytes()); }); System.out.println(response);}Wichtige Merkmale:
- Vollständige Unterstützung von HTTP/1.1 und HTTP/2
- Flexible Verwaltung des Verbindungspools und Timeouts
- Integrierte Unterstützung für Proxyserver und SSL/TLS
- Umfangreiches Ökosystem an Plugins und Interceptoren
- Kompatibel mit Java 8+
2. OkHttp
Eine moderne Bibliothek von Square, optimiert für Android und Java 8+. Sie zeichnet sich durch hohe Leistung dank asynchronem I/O und integriertem HTTP/2-Multiplexing aus. OkHttp verwaltet automatisch Wiederholungsversuche, Caching und Datenkomprimierung. Wird oft in Verbindung mit Retrofit verwendet.
Asynchrone Anfrage:
import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, java.util.concurrent.TimeUnit.SECONDS) .build();
Request request = new Request.Builder() .url("https://api.example.com/data") .build();
client.newCall(request).enqueue(new okhttp3.Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { System.err.println("Fehler: " + e.getMessage()); }
@Override public void onResponse(okhttp3.Call call, Response response) throws IOException { if (response.isSuccessful()) { System.out.println(response.body().string()); } }});Vorteile:
- Automatische Unterstützung von HTTP/2 und SPDY
- Integriertes Caching und Komprimierung (gzip)
- Asynchrone Aufrufe ohne Thread-Blockierung
- Minimale JAR-Größe (~600 KB)
- Integration mit Android und Kotlin
3. Java 11 HttpClient (Standard)
Ab Java 11 wurde der Standard-JDK-Bibliothek ein moderner HTTP-Client hinzugefügt. Er unterstützt HTTP/2, WebSocket, reaktive Datenströme sowie synchrone/asyncrone Anfragen. Eine ideale Lösung für Projekte, bei denen keine externen Abhängigkeiten eingebunden werden sollen.
Synchrone GET-Anfrage mit Fehlerbehandlung:
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .GET() .build();
try { HttpResponse<St