Client HTTP en Java : faire des requêtes correctement

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

Client HTTP en Java : faire des requêtes correctement



Dans le développement moderne, pratiquement toute application interagit avec des services externes via HTTP. Que ce soit une API REST, le téléchargement de données depuis un serveur ou l'envoi de formulaires — savoir travailler avec des requêtes HTTP est une compétence obligatoire pour un développeur Java. Dans cet article, nous allons voir comment créer un client HTTP en Java, en utilisant à la fois les outils standards et les bibliothèques tierces populaires. Vous apprendrez comment effectuer correctement des requêtes GET et POST, gérer les erreurs et analyser les réponses.



1. Approche classique : HttpURLConnection



Pendant longtemps, la méthode standard pour travailler avec HTTP en Java était la classe HttpURLConnection. Elle fait partie du package java.net et ne nécessite pas l'installation de dépendances supplémentaires. Voici un exemple d'exécution d'une requête GET :



import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;

public class SimpleHttpClient { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/data"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json");

int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder();

while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Response: " + response.toString()); } else { System.out.println("GET request failed"); } connection.disconnect(); }}


Pour une requête POST avec transmission de données JSON, le code sera un peu plus complexe :



import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;

public class PostExample { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/users"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true);

String jsonInput = "{\\"name\\":\\"John\\",\\"email\\":\\"john@example.com\\"}";

try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInput.getBytes("utf-8"); os.write(input, 0, input.length); }

int responseCode = connection.getResponseCode(); System.out.println("POST Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_CREATED) { // Lecture de la réponse similaire à GET } connection.disconnect(); }}


Avantages de HttpURLConnection :

  • Ne nécessite pas de bibliothèques supplémentaires
  • Contrôle total sur la requête
  • Support de toutes les méthodes HTTP


Inconvénients :

  • API verbeuse et peu pratique
  • Difficile de gérer les erreurs
  • Pas de support intégré pour les protocoles modernes (HTTP/2)


2. Standard moderne : HttpClient (Java 11+)



À partir de Java 11, un nouveau java.net.http.HttpClient a été ajouté à la bibliothèque standard. Il fournit une API moderne, asynchrone et beaucoup plus pratique. Voici à quoi ressemble une requête GET avec celui-ci :



import java.net.URI;import java.net.http.HttpClient;import java.net.ht                

Blogs

Book Recommendations