Introduction
La classe HttpURLConnection
du package java.net
peut être utilisée pour envoyer une requête HTTP Java de manière programmatique. Dans cet article, vous apprendrez comment utiliser HttpURLConnection
dans un programme Java pour envoyer des requêtes GET
et POST
, puis imprimer la réponse.
Prérequis
Pour cet exemple avec HttpURLConnection
, vous devriez avoir terminé le Tutoriel Spring MVC car il contient des URL pour les méthodes HTTP GET
et POST
.
Considérez le déploiement sur un serveur Tomcat localhost
.
Résumé de SpringMVCExample
Requête HTTP GET en Java
localhost:8080/SpringMVCExample/
Requête HTTP GET en Java pour la page de connexion
localhost:8080/SpringMVCExample/login
Requête HTTP POST en Java
localhost:8080/SpringMVCExample?userName=Pankaj
localhost:8080/SpringMVCExample/login?userName=Pankaj&pwd=apple123
– pour plusieurs paramètres
Extraction de paramètres du formulaire
La page HTML de la connexion contient le formulaire suivant:
<!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>
- La balise
method
estPOST
. - La balise
action
esthome
.localhost:8080/SpringMVCExample/home
userName
est de typetext
.
Vous pouvez construire une requête POST
vers:
localhost:8080/SpringMVCExample/home?userName=Pankaj
Ceci servira de base pour l’exemple de HttpURLConnection
.
Exemple de HttpURLConnection
Voici les étapes pour envoyer des requêtes HTTP en Java en utilisant la classe HttpURLConnection
:
- Créez un objet
URL
à partir de la chaîne URLGET
ouPOST
. - Appelez la méthode
openConnection()
sur l’objet URL qui renvoie une instance deHttpURLConnection
. - Définissez la méthode de requête dans l’instance
HttpURLConnection
(la valeur par défaut estGET
). - Appelez la méthode
setRequestProperty()
sur l’instanceHttpURLConnection
pour définir les valeurs des en-têtes de requête (telles que"User-Agent"
,"Accept-Language"
, etc). - Nous pouvons appeler
getResponseCode()
pour obtenir le code HTTP de réponse. De cette façon, nous savons si la requête a été traitée avec succès ou s’il y a eu un message d’erreur HTTP lancé. - Pour
GET
, utilisezReader
etInputStream
pour lire la réponse et la traiter en conséquence. - Pour
POST
, avant que le code ne traite la réponse, il doit obtenir leOutputStream
de l’instanceHttpURLConnection
et écrire les paramètresPOST
dedans.
Voici un exemple de programme qui utilise HttpURLConnection
pour envoyer des requêtes Java GET
et POST
:
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) { // succès
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// imprimer le résultat
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);
// Pour POST seulement - DÉBUT
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// Pour POST seulement - FIN
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // succès
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// imprimer le résultat
System.out.println(response.toString());
} else {
System.out.println("POST request did not work.");
}
}
}
Compilez et exécutez le code. Cela produira la sortie suivante:
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
Comparez cette sortie à la réponse HTTP du navigateur.
Si vous devez envoyer des requêtes GET
et POST
via le protocole HTTPS, alors vous devez utiliser javax.net.ssl.HttpsURLConnection
au lieu de java.net.HttpURLConnection
. HttpsURLConnection
gérera la poignée de main SSL et le chiffrement.
Conclusion
Dans cet article, vous avez appris comment utiliser HttpURLConnection
dans un programme Java pour envoyer des requêtes GET
et POST
, puis imprimer la réponse.
Continuez votre apprentissage avec plus de tutoriels Java.