java.net.URLConnection : comment travailler avec les requêtes et réponses HTTP

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi URLConnection est un must-know pour tout développeur Java

\n\n

Vous êtes-vous déjà demandé comment votre navigateur préféré ou votre application mobile communique avec le serveur ? La magie se cache dans des requêtes HTTP simples mais puissantes. Et en Java, il existe un « couteau suisse » pour cela : la classe java.net.URLConnection.

\n\n

Bien que Java 11 ait introduit le nouveau HttpClient modulaire, des milliers de développeurs dans le monde continuent d'utiliser le bon vieux URLConnection. Pourquoi ? Premièrement, il s'agit de code legacy qu'il faut maintenir. Deuxièmement, il est simple et ne nécessite pas de bibliothèques tierces. Et troisièmement, comprendre le fonctionnement des requêtes HTTP à bas niveau fait de vous un véritable expert.

\n\n

Dans cet article, nous ne nous contenterons pas de copier une réponse de Stack Overflow. Nous analyserons deux approches pour travailler avec URLConnection et les comparerons au HttpClient moderne. Vous apprendrez à envoyer des requêtes GET et POST, à gérer les erreurs, à définir des en-têtes et à lire les réponses du serveur. C'est parti !

\n\n

Qu'est-ce que java.net.URLConnection et pourquoi en a-t-on besoin ?

\n\n

La classe java.net.URLConnection est une classe abstraite qui représente une connexion active à une ressource spécifiée par une URL. En termes simples : c'est un pont entre votre application Java et le serveur sur Internet. Elle permet de :

\n
    \n
  • Ouvrir une connexion avec le serveur
  • \n
  • Envoyer des données (GET, POST, PUT, DELETE)
  • \n
  • Lire la réponse du serveur
  • \n
  • Gérer les en-têtes de requête et de réponse
  • \n
  • Travailler avec les cookies
  • \n
\n\n

Mais il y a un détail : URLConnection ne fait rien par elle-même. Elle fournit seulement un mécanisme. Toute la magie est réalisée par ses sous-classes — par exemple, HttpURLConnection pour travailler avec HTTP.

\n\n

Approche 1 : La méthode classique avec HttpURLConnection (éprouvée par le temps)

\n\n

Cette méthode a été utilisée par les pères fondateurs de la programmation Java. Elle est fiable, mais nécessite un travail manuel. Analysons-la avec un exemple de requête GET.

\n\n

Exemple 1 : Requête GET avec traitement de la réponse

\n\n
import java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\npublic class GetRequestExample {\n    public static void main(String[] args) throws Exception {\n        // 1. Créer un objet URL\n        URL url = new URL("https://api.github.com/users/octocat");\n        \n        // 2. Ouvrir la connexion\n        HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n        \n        // 3. Configurer la requête\n        connection.setRequestMethod("GET");\n        connection.setRequestProperty("User-Agent", "Mozilla/5.0");\n        connection.setConnectTimeout(5000);\n        connection.setReadTimeout(5000);\n        \n        // 4. Vérifier le code de réponse\n        int responseCode = connection.getResponseCode();\n        System.out.println("Code de réponse : " + responseCode);\n        \n        // 5. Lire le corps de la réponse\n        if (responseCode == HttpURLConnection.HTTP_OK) {\n            BufferedReader in = new BufferedReader(\n                new InputStreamReader(connection.getInputStream()));\n            String inputLine;\n            StringBuilder response = new StringBuilder();\n            \n            while ((inputLine = in.readLine()) != null) {\n                response.append(inputLine);\n            }\n            in.close();\n            \n            System.out.println("Corps de la réponse : " + response.toString());\n        } else {\n            System.out.println("La requête GET a échoué");\n        }\n        \n        // 6. Fermer la connexion\n        connection.disconnect();\n    }\n}\n
\n\n

Analyse du code :

\n