java.net.http.HttpClient
Envoyez des requêtes synchrones
java.net.http.HttpClient est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Le client HTTP moderne
Depuis Java 11, le JDK fournit un client HTTP moderne dans le paquet java.net.http. Il remplace l’ancien HttpURLConnection par une API claire et fluide qui prend en charge HTTP/1.1 et HTTP/2.
Les trois types principaux sont :
- HttpClient — envoie les requêtes et gère la configuration (délais d’expiration, mandataires et redirections).
- HttpRequest — une description immuable de ce qui doit être envoyé.
- HttpResponse — le résultat, avec notamment le statut, les en-têtes et le corps.
Créer un HttpClient
Vous construisez un client avec la méthode statique newBuilder(). Un même client peut être réutilisé pour de nombreuses requêtes et est sûr en cas d’accès concurrents.
Nous configurons ici HTTP/2 et un délai d’expiration de connexion. newHttpClient() est également disponible pour créer rapidement une instance par défaut.
import java.net.http.HttpClient;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(10))
.build();
System.out.println("Client version: " + client.version());
}
}Construire une requête
HttpRequest est immuable et se construit à l’aide d’un générateur fluide. Au minimum, vous fournissez une URI ; par défaut, il effectue un GET.
Vous convertissez une chaîne en URI avec URI.create(...).
import java.net.URI;
import java.net.http.HttpRequest;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/data"))
.GET()
.build();
System.out.println("Method: " + request.method());
System.out.println("URI: " + request.uri());
}
}Effectuer un envoi synchrone
La méthode send bloque le fil d’exécution appelant jusqu’à l’arrivée de la réponse. Elle a besoin d’un BodyHandler qui indique au client comment interpréter le corps de la réponse.
BodyHandlers.ofString() lit le corps dans une String.
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode());
}
}Lire le code d’état
La réponse expose statusCode() sous la forme d’un int. Les codes de la plage 2xx indiquent une réussite, les codes 3xx des redirections, les codes 4xx des erreurs du client et les codes 5xx des erreurs du serveur.
Remarque : le client HTTP ne lève jamais d’exception pour une réponse 4xx/5xx — vous devez vérifier le code vous-même.
public class Main {
public static void main(String[] args) {
int status = 404;
String label;
if (status >= 200 && status < 300) label = "Success";
else if (status >= 300 && status < 400) label = "Redirect";
else if (status >= 400 && status < 500) label = "Client error";
else label = "Server error";
System.out.println(status + " -> " + label);
}
}Lire le corps
Avec BodyHandlers.ofString(), response.body() renvoie une String. D’autres gestionnaires existent pour les octets, les fichiers et les flux ; ils seront présentés plus loin.
Cet extrait simule le contenu du corps que vous recevriez.
public class Main {
public static void main(String[] args) {
String body = "{\"message\":\"hello\"}";
System.out.println("Body length: " + body.length());
System.out.println("Body: " + body);
}
}Gérer les redirections
Par défaut, le client ne suit pas les redirections. Configurez ce comportement sur le générateur avec followRedirects(...).
Les options de HttpClient.Redirect sont NEVER, ALWAYS et NORMAL (suivre les redirections, sauf lors d’une rétrogradation de HTTPS vers HTTP).
import java.net.http.HttpClient;
public class Main {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
System.out.println("Redirect policy: " + client.followRedirects());
}
}Délais d’attente par requête
Le délai d’attente de connexion se trouve sur le client. Un délai d’attente de requête (durée d’attente d’une réponse) se définit sur la requête via timeout(...).
S’il expire, send lève une HttpTimeoutException.
import java.net.URI;
import java.net.http.HttpRequest;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.timeout(Duration.ofSeconds(5))
.build();
System.out.println("Timeout set: " + request.timeout().isPresent());
}
}Examiner les en-têtes de réponse
La réponse contient un objet HttpHeaders accessible via headers(). Les recherches d’en-têtes ne tiennent pas compte de la casse et peuvent renvoyer plusieurs valeurs ; firstValue(...) renvoie un Optional<String>.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// Simulating a header lookup result
Optional<String> contentType = Optional.of("application/json");
System.out.println("Content-Type: " + contentType.orElse("unknown"));
}
}Exceptions vérifiées
La méthode synchrone send déclare deux exceptions vérifiées :
- exception d’entrée-sortie — échec du réseau ou du protocole.
- InterruptedException — le fil d’exécution bloqué a été interrompu.
Vous devez intercepter ou déclarer les deux. Les appels asynchrones, présentés dans la prochaine leçon, évitent cela en renvoyant un futur.
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// client.send(...) would go here
throw new IOException("connection refused");
} catch (IOException e) {
System.out.println("Network problem: " + e.getMessage());
}
}
}Un client réutilisable
Bonne pratique : créez un seul HttpClient et réutilisez-le dans toute l’application. Il regroupe les connexions et est entièrement sûr vis-à-vis des fils d’exécution.
Créer un nouveau client pour chaque requête gaspille des ressources et empêche le multiplexage HTTP/2.
import java.net.http.HttpClient;
public class Main {
private static final HttpClient SHARED = HttpClient.newHttpClient();
public static void main(String[] args) {
System.out.println("Shared client ready: " + (SHARED != null));
}
}Vérification rapide
Vérifiez votre compréhension du client HTTP synchrone.
Récapitulatif
Vous avez appris les bases du client HTTP du JDK :
- HttpClient.newBuilder() configure la version, le délai d’attente et les redirections ; réutilisez une seule instance.
- HttpRequest.newBuilder().uri(...).GET() construit une requête immuable.
- client.send(request, BodyHandlers.ofString()) bloque et renvoie un
HttpResponse<String>. - Lisez les résultats avec
statusCode(),body()etheaders(). - Les codes autres que 2xx ne déclenchent pas d’exception — vérifiez-les vous-même.
Questions Fréquemment Posées
La leçon « java.net.http.HttpClient » est-elle gratuite ?
Oui — le texte complet de « java.net.http.HttpClient » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « java.net.http.HttpClient » ?
Envoyez des requêtes synchrones Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « java.net.http.HttpClient » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- java.net.http.HttpClient
- Requêtes asynchrones
- Corps et en-têtes des requêtes
- Gérer les réponses