HTTP-Client für Java: Überblick über die Top-Bibliotheken (Java 11, Apache, OkHttp, Retrofit)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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                    

Empfehlungen