Comment utiliser Java HttpURLConnection pour les requêtes HTTP GET et POST

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 est POST.
  • La balise action est home.
    • localhost:8080/SpringMVCExample/home
  • userName est de type text.

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:

  1. Créez un objet URL à partir de la chaîne URL GET ou POST.
  2. Appelez la méthode openConnection() sur l’objet URL qui renvoie une instance de HttpURLConnection.
  3. Définissez la méthode de requête dans l’instance HttpURLConnection (la valeur par défaut est GET).
  4. Appelez la méthode setRequestProperty() sur l’instance HttpURLConnection pour définir les valeurs des en-têtes de requête (telles que "User-Agent", "Accept-Language", etc).
  5. 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é.
  6. Pour GET, utilisez Reader et InputStream pour lire la réponse et la traiter en conséquence.
  7. Pour POST, avant que le code ne traite la réponse, il doit obtenir le OutputStream de l’instance HttpURLConnection et écrire les paramètres POST dedans.

Voici un exemple de programme qui utilise HttpURLConnection pour envoyer des requêtes Java GET et POST:

HttpURLConnectionExample.java
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:

Output
GET 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.

Source:
https://www.digitalocean.com/community/tutorials/java-httpurlconnection-example-java-http-request-get-post