Einführung
Die Klasse HttpURLConnection
aus dem Paket java.net
kann verwendet werden, um programmgesteuert eine Java HTTP-Anfrage zu senden. In diesem Artikel erfahren Sie, wie Sie HttpURLConnection
in einem Java-Programm verwenden, um GET
– und POST
-Anfragen zu senden und dann die Antwort auszudrucken.
Voraussetzungen
Für dieses Beispiel mit HttpURLConnection
sollten Sie das Spring MVC Tutorial abgeschlossen haben, da es URLs für die GET
– und POST
-HTTP-Methoden enthält.
Erwägen Sie die Bereitstellung auf einem localhost
Tomcat-Server.
Zusammenfassung des SpringMVC-Beispiels
Java HTTP GET-Anfrage
localhost:8080/SpringMVCExample/
Java HTTP GET-Anfrage für die Anmeldeseite
localhost:8080/SpringMVCExample/login
Java HTTP POST-Anfrage
localhost:8080/SpringMVCExample?userName=Pankaj
localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123
– für mehrere Parameter
Parameter aus dem Formular ableiten
Der HTML-Code der Anmeldeseite enthält das folgende Formular:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Page</title>
</head>
<body>
<form action="home" method="post">
<input type="text" name="userName"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
- Die
Methode
istPOST
. - Die
Aktion
isthome
.localhost:8080/SpringMVCExample/home
Benutzername
ist vom TypText
.
Sie können eine POST
-Anfrage erstellen an:
localhost:8080/SpringMVCExample/home?userName=Pankaj
Dies dient als Grundlage für das Beispiel mit HttpURLConnection
.
Beispiel mit HttpURLConnection
Hier sind die Schritte zum Senden von Java HTTP-Anfragen mit der Klasse HttpURLConnection
:
- Erstellen Sie ein
URL
-Objekt aus derGET
– oderPOST
-URL-Zeichenfolge. - Rufen Sie die Methode
openConnection()
auf dem URL-Objekt auf, die eine Instanz vonHttpURLConnection
zurückgibt. - Setzen Sie die Anfrage-Methode in der Instanz von
HttpURLConnection
(Standardwert istGET
). - Rufen Sie die Methode
setRequestProperty()
auf der Instanz vonHttpURLConnection
auf, um Werte für die Anfrage-Header festzulegen (wie"User-Agent"
,"Accept-Language"
usw.). - Wir können
getResponseCode()
aufrufen, um den HTTP-Code der Antwort zu erhalten. Auf diese Weise erfahren wir, ob die Anfrage erfolgreich verarbeitet wurde oder ob eine HTTP-Fehlermeldung aufgetreten ist. - Für
GET
verwenden SieReader
undInputStream
, um die Antwort zu lesen und entsprechend zu verarbeiten. - Für
POST
muss der Code vor der Verarbeitung der Antwort denOutputStream
von der Instanz vonHttpURLConnection
erhalten undPOST
-Parameter darin schreiben.
Hier ist ein Beispielprogramm, das HttpURLConnection
verwendet, um Java GET
und POST
-Anfragen zu senden:
package com.journaldev.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpURLConnectionExample {
private static final String USER_AGENT = "Mozilla/5.0";
private static final String GET_URL = "https://localhost:9090/SpringMVCExample";
private static final String POST_URL = "https://localhost:9090/SpringMVCExample/home";
private static final String POST_PARAMS = "userName=Pankaj";
public static void main(String[] args) throws IOException {
sendGET();
System.out.println("GET DONE");
sendPOST();
System.out.println("POST DONE");
}
private static void sendGET() throws IOException {
URL obj = new URL(GET_URL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
int responseCode = con.getResponseCode();
System.out.println("GET Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // Erfolg
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Ergebnis ausgeben
System.out.println(response.toString());
} else {
System.out.println("GET request did not work.");
}
}
private static void sendPOST() throws IOException {
URL obj = new URL(POST_URL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
// Nur für POST - START
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// Nur für POST - END
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // Erfolg
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Ergebnis ausgeben
System.out.println(response.toString());
} else {
System.out.println("POST request did not work.");
}
}
}
Das Code-Beispiel kompilieren und ausführen. Es wird die folgende Ausgabe erzeugen:
OutputGET Response Code :: 200
<html><head> <title>Home</title></head><body><h1> Hello world! </h1><P> The time on the server is March 6, 2015 9:31:04 PM IST. </P></body></html>
GET DONE
POST Response Code :: 200
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>User Home Page</title></head><body><h3>Hi Pankaj</h3></body></html>
POST DONE
Vergleichen Sie diese Ausgabe mit der HTTP-Antwort im Browser.
Wenn Sie GET
– und POST
-Anfragen über das HTTPS-Protokoll senden müssen, müssen Sie javax.net.ssl.HttpsURLConnection
anstelle von java.net.HttpURLConnection
verwenden. HttpsURLConnection
wird den SSL-Handshake und die Verschlüsselung verarbeiten.
Schlussfolgerung
In diesem Artikel haben Sie gelernt, wie Sie HttpURLConnection
in einem Java-Programm verwenden, um GET
– und POST
-Anfragen zu senden und dann die Antwort zu drucken.
Setzen Sie Ihr Lernen mit weiteren Java-Tutorials fort.