java.net.URLConnection: So arbeiten Sie mit HTTP-Anfragen und -Antworten

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

Einleitung: Warum URLConnection ein Must-Know für Java-Entwickler ist

\n\n

Haben Sie sich jemals gefragt, wie Ihr Lieblingsbrowser oder Ihre mobile App mit dem Server kommuniziert? Die Magie verbirgt sich in einfachen, aber leistungsstarken HTTP-Anfragen. Und in Java gibt es dafür ein „Schweizer Taschenmesser“ – die Klasse java.net.URLConnection.

\n\n

Obwohl in Java 11 der neue modulare HttpClient eingeführt wurde, verwenden Tausende von Entwicklern weltweit weiterhin den guten alten URLConnection. Warum? Erstens gibt es Legacy-Code, der gewartet werden muss. Zweitens ist er einfach und benötigt keine externen Bibliotheken. Und drittens macht Sie das Verständnis, wie HTTP-Anfragen auf niedriger Ebene funktionieren, zu einem echten Profi.

\n\n

In diesem Artikel kopieren wir nicht einfach eine Antwort von Stack Overflow. Wir analysieren zwei Ansätze für die Arbeit mit URLConnection und vergleichen sie mit dem modernen HttpClient. Sie erfahren, wie Sie GET- und POST-Anfragen senden, Fehler behandeln, Header setzen und Serverantworten lesen. Los geht's!

\n\n

Was ist java.net.URLConnection und wozu wird es benötigt?

\n\n

Die Klasse java.net.URLConnection ist eine abstrakte Klasse, die eine aktive Verbindung zu einer Ressource darstellt, die durch eine URL angegeben wird. Einfach ausgedrückt: Sie ist die Brücke zwischen Ihrer Java-Anwendung und dem Server im Internet. Sie kann:

\n
    \n
  • Eine Verbindung zum Server öffnen
  • \n
  • Daten senden (GET, POST, PUT, DELETE)
  • \n
  • Die Serverantwort lesen
  • \n
  • Anfrage- und Antwortheader verwalten
  • \n
  • Mit Cookies arbeiten
  • \n
\n\n

Es gibt jedoch einen Haken: URLConnection tut selbst nichts. Es stellt lediglich den Mechanismus bereit. Die ganze Magie wird von seinen Unterklassen vollbracht – zum Beispiel HttpURLConnection für die Arbeit mit HTTP.

\n\n

Ansatz 1: Die klassische Methode mit HttpURLConnection (zeitlich erprobt)

\n\n

Diese Methode wurde von den Urvätern der Java-Programmierung verwendet. Sie ist zuverlässig, erfordert aber manuelle Arbeit. Lassen Sie uns dies am Beispiel einer GET-Anfrage analysieren.

\n\n

Beispiel 1: GET-Anfrage mit Antwortverarbeitung

\n\n
import java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\npublic class GetRequestExample {\n    public static void main(String[] args) throws Exception {\n        // 1. URL-Objekt erstellen\n        URL url = new URL("https://api.github.com/users/octocat");\n        \n        // 2. Verbindung öffnen\n        HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n        \n        // 3. Anfrage konfigurieren\n        connection.setRequestMethod("GET");\n        connection.setRequestProperty("User-Agent", "Mozilla/5.0");\n        connection.setConnectTimeout(5000);\n        connection.setReadTimeout(5000);\n        \n        // 4. Antwortcode prüfen\n        int responseCode = connection.getResponseCode();\n        System.out.println("Response Code: " + responseCode);\n        \n        // 5. Antworttext lesen\n        if (responseCode == HttpURLConnection.HTTP_OK) {\n            BufferedReader in = new BufferedReader(\n                new InputStreamReader(connection.getInputStream()));\n            String inputLine;\n            StringBuilder response = new StringBuilder();\n            \n            while ((inputLine = in.readLine()) != null) {\n                response.append(inputLine);\n            }\n            in.close();\n            \n            System.out.println("Response Body: " + response.toString());\n        } else {\n            System.out.println("GET request failed");\n        }\n        \n        // 6. Verbindung schließen\n        connection.disconnect();\n    }\n}\n
\n\n

Code-Analyse:

\n