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:
- URL-Instanz erstellen: Erzeugen Sie eine Instanz der Klasse
java.net.URL
mit der Ziel-URL. - HttpURLConnection öffnen: Rufen Sie die Methode
openConnection()
der URL auf, um eineHttpURLConnection
-Instanz zu erhalten. - Anfrage konfigurieren: Definieren Sie den Anfragetyp mit
setRequestMethod()
als „GET“. - Anfrage senden: Rufen Sie die Methode
connect()
auf, um die HTTP GET-Anfrage zu übermitteln. - 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:
- URL-Instanz erstellen: Erzeugen Sie eine Instanz der Klasse
java.net.URL
mit der Ziel-URL. - HttpURLConnection öffnen: Rufen Sie die Methode
openConnection()
der URL auf, um eineHttpURLConnection
-Instanz zu gewinnen. - Anfrage konfigurieren: Setzen Sie den Anfragetyp mit
setRequestMethod()
auf „POST“. Aktivieren Sie die Anfrage für die Ausgabe mitsetDoOutput(true)
. - Anfragedaten schreiben: Verwenden Sie
getOutputStream()
, um einen Ausgabestream zu erhalten und schreiben Sie die Anfragedaten in diesen Stream. - Anfrage senden: Rufen Sie die Methode
connect()
auf, um die HTTP POST-Anfrage zu übermitteln. - 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.