Inleiding
De klasse HttpURLConnection
uit het pakket java.net
kan worden gebruikt om programmatisch een Java HTTP-verzoek te verzenden. In dit artikel leer je hoe je HttpURLConnection
kunt gebruiken in een Java-programma om GET
– en POST
-verzoeken te verzenden en vervolgens de reactie af te drukken.
Vereisten
Voor dit voorbeeld van HttpURLConnection
moet je de Spring MVC-zelfstudie hebben afgerond, omdat het URL’s bevat voor de GET
– en POST
-HTTP-methoden.
Overweeg implementatie op een Tomcat-server op localhost
.
Samenvatting SpringMVCExample
Java HTTP GET-verzoek
localhost:8080/SpringMVCExample/
Java HTTP GET-verzoek voor inlogpagina
localhost:8080/SpringMVCExample/login
Java HTTP POST-verzoek
localhost:8080/SpringMVCExample?userName=Pankaj
localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123
– voor meerdere parameters
Parameters afleiden van het formulier
De HTML van de inlogpagina bevat het volgende formulier:
<!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>
- De
methode
isPOST
. - De
actie
ishome
.localhost:8080/SpringMVCExample/home
userName
is van het typetext
.
Je kunt een POST
-verzoek construeren naar:
localhost:8080/SpringMVCExample/home?userName=Pankaj
Dit zal dienen als basis voor het voorbeeld met HttpURLConnection
.
Voorbeeld met HttpURLConnection
Hier zijn de stappen voor het verzenden van Java HTTP-verzoeken met behulp van de klasse HttpURLConnection
:
- Maak een
URL
-object van deGET
ofPOST
URL-reeks. - Roep de methode
openConnection()
aan op het URL-object dat een instantie vanHttpURLConnection
retourneert. - Stel de verzoekmethode in op een
HttpURLConnection
-instantie (standaardwaarde isGET
). - Roep de methode
setRequestProperty()
aan op deHttpURLConnection
-instantie om de waarden van de verzoekheaders in te stellen (zoals"User-Agent"
,"Accept-Language"
, enzovoort). - We kunnen
getResponseCode()
aanroepen om de HTTP-reactiecode te verkrijgen. Op deze manier weten we of het verzoek succesvol is verwerkt of dat er een HTTP-foutbericht is opgetreden. - Voor
GET
gebruik jeReader
enInputStream
om de reactie te lezen en dienovereenkomstig te verwerken. - Voor
POST
moet de code voordat deze de reactie behandelt, deOutputStream
van deHttpURLConnection
-instantie verkrijgen enPOST
-parameters erin schrijven.
Hier is een voorbeeldprogramma dat HttpURLConnection
gebruikt om Java GET
– en POST
-verzoeken te verzenden:
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) { // succes
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// resultaat afdrukken
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);
// Alleen voor POST - START
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// Alleen voor POST - EIND
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // succes
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// resultaat afdrukken
System.out.println(response.toString());
} else {
System.out.println("POST request did not work.");
}
}
}
Compileer en voer de code uit. Dit zal de volgende uitvoer produceren:
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
Vergelijk deze uitvoer met de HTTP-reactie in de browser.
Als je GET
en POST
verzoeken over het HTTPS-protocol moet versturen, moet je javax.net.ssl.HttpsURLConnection
gebruiken in plaats van java.net.HttpURLConnection
. HttpsURLConnection
zal de SSL-handshake en versleuteling afhandelen.
Conclusie
In dit artikel heb je geleerd hoe je HttpURLConnection
in een Java-programma kunt gebruiken om GET
en POST
verzoeken te versturen en vervolgens de reactie af te drukken.
Ga verder met je leerproces met meer Java-tutorials.