So verwenden Sie Java HttpURLConnection für HTTP GET- und POST-Anfragen

Verwendung von Java HttpURLConnection für HTTP GET- und POST-Anfragen

Die Java-Klasse HttpURLConnection erweist sich als ein vielseitiges Instrument, um HTTP-Anfragen zu versenden und HTTP-Antworten in Java-Anwendungen zu empfangen. Sie bietet einen einfachen und zugleich flexiblen Weg, mit Webservern und RESTful-APIs zu interagieren. Dieser Beitrag erläutert detailliert, wie Sie die Klasse HttpURLConnection einsetzen können, um HTTP GET- und POST-Anfragen in Ihren Java-Projekten zu realisieren.

Einführung

Die Klasse HttpURLConnection ist ein integraler Bestandteil des Standardbibliothekspakets java.net. Sie dient als abstrakte Klasse, die eine grundlegende Schnittstelle für HTTP-Verbindungen bereitstellt. Diese Schnittstelle ermöglicht es Entwicklern, HTTP-Anfragen an einen bestimmten Server zu senden und die entsprechenden HTTP-Antworten zu empfangen.

Die Klasse HttpURLConnection ist hochgradig konfigurierbar und gestattet die Anpassung diverser Verbindungsparameter, darunter der Anfragetyp (GET, POST, PUT, DELETE etc.), die Header-Parameter, Timeout-Einstellungen und Caching-Richtlinien. Darüber hinaus unterstützt sie sichere Verbindungen via HTTPS und den Einsatz von Proxyservern.

Senden von HTTP GET-Anfragen

HTTP GET-Anfragen dienen dem Abrufen von Daten von einem Server. Um eine HTTP GET-Anfrage mit HttpURLConnection zu realisieren, folgen Sie diesen Schritten:

  1. URL-Instanz erstellen: Erzeugen Sie eine Instanz der Klasse java.net.URL mit der Ziel-URL.
  2. HttpURLConnection öffnen: Rufen Sie die Methode openConnection() der URL auf, um eine HttpURLConnection-Instanz zu erhalten.
  3. Anfrage konfigurieren: Definieren Sie den Anfragetyp mit setRequestMethod() als „GET“.
  4. Anfrage senden: Rufen Sie die Methode connect() auf, um die HTTP GET-Anfrage zu übermitteln.
  5. Antwort empfangen: Nutzen Sie getInputStream(), um den Antwortdatenstrom zu erhalten.

Beispiel für eine HTTP GET-Anfrage:


import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class HttpGetBeispiel {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://www.example.com/api/v1/users");
        HttpURLConnection verbindung = (HttpURLConnection) url.openConnection();
        verbindung.setRequestMethod("GET");

        try (BufferedReader leser = new BufferedReader(new InputStreamReader(verbindung.getInputStream()))) {
            String antwort = leser.readLine();
            System.out.println(antwort);
        }
    }
}

Senden von HTTP POST-Anfragen

HTTP POST-Anfragen werden verwendet, um Daten an einen Server zu senden. Um eine HTTP POST-Anfrage mit HttpURLConnection zu versenden, gehen Sie wie folgt vor:

  1. URL-Instanz erstellen: Erzeugen Sie eine Instanz der Klasse java.net.URL mit der Ziel-URL.
  2. HttpURLConnection öffnen: Rufen Sie die Methode openConnection() der URL auf, um eine HttpURLConnection-Instanz zu gewinnen.
  3. Anfrage konfigurieren: Setzen Sie den Anfragetyp mit setRequestMethod() auf „POST“. Aktivieren Sie die Anfrage für die Ausgabe mit setDoOutput(true).
  4. Anfragedaten schreiben: Verwenden Sie getOutputStream(), um einen Ausgabestream zu erhalten und schreiben Sie die Anfragedaten in diesen Stream.
  5. Anfrage senden: Rufen Sie die Methode connect() auf, um die HTTP POST-Anfrage zu übermitteln.
  6. Antwort empfangen: Nutzen Sie getInputStream(), um den Antwortdatenstrom zu erhalten.

Beispiel für eine HTTP POST-Anfrage:


import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class HttpPostBeispiel {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://www.example.com/api/v1/users");
        HttpURLConnection verbindung = (HttpURLConnection) url.openConnection();
        verbindung.setRequestMethod("POST");
        verbindung.setDoOutput(true);

        String anfrageKoerper = "name=John&surname=Doe";
        try (OutputStream ausgabe = verbindung.getOutputStream()) {
            ausgabe.write(anfrageKoerper.getBytes());
        }

        try (BufferedReader leser = new BufferedReader(new InputStreamReader(verbindung.getInputStream()))) {
            String antwort = leser.readLine();
            System.out.println(antwort);
        }
    }
}

Zusammenfassung

Die Java-Klasse HttpURLConnection erweist sich als ein leistungsfähiges Werkzeug zum Senden und Empfangen von HTTP-Anfragen innerhalb von Java-Applikationen. Sie zeichnet sich durch hohe Konfigurierbarkeit aus und unterstützt diverse HTTP-Methoden sowie Header-Parameter. Durch die Umsetzung der in diesem Artikel präsentierten Schritte können Sie die Klasse HttpURLConnection gewinnbringend einsetzen, um Ihre Java-Anwendungen mit Webservern und RESTful-APIs zu verbinden.

FAQ

1. Worin liegt der Unterschied zwischen HTTP GET- und POST-Anfragen?
HTTP GET-Anfragen dienen dem Abrufen von Daten vom Server, während HTTP POST-Anfragen dem Senden von Daten an den Server dienen.

2. Welche Bedeutung hat die Methode setRequestMethod()?
Die Methode setRequestMethod() bestimmt den HTTP-Anfragetyp. Sie kann genutzt werden, um GET, POST, PUT, DELETE oder andere HTTP-Methoden zu spezifizieren.

3. Wann sollte ich setDoOutput(true) verwenden?
Die Methode setDoOutput(true) ist zu verwenden, wenn Sie Daten über die HTTP-Anfrage versenden möchten. Dies ist bei HTTP POST-Anfragen notwendig.

4. Wie lese ich die HTTP-Antwort?
Sie können die HTTP-Antwort lesen, indem Sie die Methode getInputStream() der HttpURLConnection nutzen. Diese Methode gibt einen InputStream zurück, der die Antwortdaten enthält.

5. Wie kann ich HTTP-Header zu meiner Anfrage hinzufügen?
Sie können HTTP-Header zu Ihrer Anfrage hinzufügen, indem Sie die Methode setRequestProperty() der HttpURLConnection nutzen.

6. Wie definiere ich Timeouts für meine Anfragen?
Sie können Timeouts für Ihre Anfragen definieren, indem Sie die Methoden setConnectTimeout() und setReadTimeout() der HttpURLConnection verwenden.

7. Wie stelle ich eine sichere Verbindung über HTTPS her?
Sie können eine sichere Verbindung über HTTPS herstellen, indem Sie die Klasse HttpsURLConnection verwenden.

8. Wie kann ich einen Proxyserver verwenden?
Sie können einen Proxyserver einsetzen, indem Sie die Methoden setProxy() und setProxySelector() der HttpURLConnection nutzen.

9. Was bedeutet Caching im Zusammenhang mit HttpURLConnection?
Caching bezeichnet den Mechanismus, bei dem die von einer HttpURLConnection abgerufenen Antworten zwischengespeichert werden, um nachfolgende Anfragen zu beschleunigen.

10. Wie kann ich Debugging-Informationen für meine HTTP-Anfragen und -Antworten einsehen?
Sie können Debugging-Informationen einsehen, indem Sie die Methode setUseCaches() auf false setzen und die Methode getErrorStream() verwenden, um Fehlermeldungen abzurufen.