La possibilité d'effectuer des requêtes HTTP est l'une des caractéristiques essentielles de la programmation moderne, et souvent l'une des premières choses que l'on veut faire quand on apprend un nouveau langage de programmation. Les programmeurs Java disposent pour ce faire de nombreuses options, que ce soit via les bibliothèques de base du JDK ou des bibliothèques tierces. Cet article vous présentera les clients HTTP Java auxquels je fais appel. Si toutefois vous en utilisez d'autres, c'est très bien, n'hésitez pas à me dire lesquels. J'aborderai dans cet article : Show API JAVA DE BASE : BIBLIOTHÈQUES POPULAIRES : J'utiliserai l'API Astonomy Picture of the Day issue des API de la NASA pour les exemples de code, lequel est consultable dans son intégralité sur GitHub dans un projet basé sur Java 11. API Java de base pour effectuer des requêtes HTTP JavaS'il existe depuis Java 1.1 un client HTTP dans les bibliothèques de base fournies avec le JDK, Java 11 a vu pour sa part l'ajout d'un nouveau client. L'un ou l'autre de ces clients sera un bon choix si vous êtes sensible à l'ajout de dépendances supplémentaires à votre projet. HttpURLConnection de Java 1.1Tout d'abord, faut-il ou non mettre une majuscule aux acronymes dans les noms de classe ? Vous allez devoir prendre une décision. Quoi qu'il en soit, fermez les yeux et imaginez que vous êtes en 1997. Titanic cartonne au box office et inspire des milliers de mèmes, les Spice Girls sont en tête des ventes d'albums, mais la plus grande nouvelle de l'année, c'est sans doute l'ajout de HttpURLConnection à Java 1.1. Voilà comment l'utiliser pour effectuer une requête
[code complet sur GitHub] Cela me paraît plutôt verbeux, et je
trouve que l'ordre dans lequel il faut faire les choses est déroutant (pourquoi définir les en-têtes après avoir ouvert l'URL ?). Si vous avez besoin d'effectuer des requêtes plus complexes avec des corps Alors, dans quels cas utiliser HttpClient de Java 11Plus de vingt ans après Dans 99 % des cas, quand j'effectue une requête HTTP, je veux pouvoir lire le corps de la réponse dans mon code. Toute bibliothèque qui va rendre cette tâche complexe ne peut faire mon bonheur. HttpClient accepte un Il s'agit d'une requête synchrone :
Pour une requête asynchrone, le
[code complet sur GitHub] Bibliothèques client HTTP Java tiercesSi les clients intégrés ne fonctionnent pas pour vous, ne vous inquiétez pas ! Il existe de nombreuses bibliothèques pouvant être incluses dans votre projet, qui feront parfaitement l'affaire. Apache HttpClientLes clients HTTP de l'Apache Software Foundation existent depuis un bon moment. Ils sont largement utilisés et sont à la base d'un grand nombre de bibliothèques de haut niveau. L'histoire est un peu déroutante. L'ancien client Commons HttpClient n'est plus développé, et la nouvelle version (qui s'appelle aussi HttpClient) fait partie du projet HttpComponents. La version 5.0 de la bibliothèque, publiée début 2020, ajoute la prise en charge du protocole HTTP/2. Elle prend également en charge les requêtes synchrones et asynchrones. Dans l'ensemble, l'API est plutôt de bas niveau ; il faut implémenter une grande partie par soi-même. Le code ci-dessous appelle l'API de la NASA. Il ne semble pas trop difficile à utiliser, mais j'ai ignoré une grande partie de la gestion des erreurs que l'on voudrait voir dans du code mis en production, et j'ai dû là aussi ajouter du code Jackson afin d'analyser la réponse JSON. On pourrait aussi être tenté de configurer un framework de journalisation afin d'éviter les avertissements sur le flux de sortie standard (pas un problème en soi, mais c'est juste un peu agaçant). Quoi qu'il en soit, voici le code :
[code complet sur GitHub] Apache fournit plusieurs autres exemples pour ce qui est des requêtes synchrones et asynchrones. OkHttpOkHttp est un client HTTP de Square offrant de nombreuses fonctions intégrées très utiles, telles que la gestion automatique du format GZIP, la mise en cache des réponses et les nouvelles tentatives ou le repli vers d'autres hôtes en cas d'erreurs réseau, ainsi que la prise en charge du protocole HTTP/2 et des WebSockets. L'API est propre, bien qu'elle ne propose pas d'analyse intégrée des réponses JSON. J'ai donc là encore ajouté du code pour analyser le JSON avec Jackson :
[code complet sur GitHub] C'est déjà bien, mais OkHttp ne révèle vraiment son plein potentiel que lorsqu'on y ajoute Retrofit. RetrofitRetrofit est une autre bibliothèque de Square, construite sur la base d'OkHttp. En plus de toutes les fonctionnalités de bas niveau d'OkHttp, elle ajoute un moyen de construire des classes Java capables d'extraire les détails HTTP et de présenter une API conviviale et compatible avec Java. Tout d'abord, nous devons créer une interface déclarant les méthodes que nous voulons appeler par rapport à l'API APOD, avec des annotations définissant la manière dont celles-ci correspondent aux requêtes HTTP :
Le type de retour qu'offre Après avoir déclaré l'interface, nous demandons à Retrofit de créer une implémentation pouvant être utilisée pour envoyer des requêtes vers une URL de base donnée. Pouvoir changer l'URL de base est également utile dans le cadre des tests d'intégration. Pour générer le client, le code se présente comme suit :
[code complet sur GitHub] Authentification de l'APIS'il existe dans notre interface plusieurs méthodes nécessitant toutes une clé API, il est possible de configurer cela en ajoutant un
[code complet sur GitHub] J'aime ce type d'API Java pour tous les cas, sauf les plus simples. La création de classes pour représenter les API distantes est une bonne méthode d'abstraction qui fonctionne bien avec l'injection de dépendances, et faire en sorte que Retrofit les crée pour vous à partir d'un client OkHttp personnalisable est remarquable. Autres clients HTTP pour JavaDepuis la publication de cet article sur Twitter, j'ai été ravi de voir les gens discuter des clients HTTP qu'ils utilisent. Si aucune des propositions ci-dessus ne correspond exactement à ce que vous recherchez, jetez un coup d'œil à ces suggestions : RésuméLe choix
est vaste en matière de clients HTTP en Java. Pour les cas simples, je recommanderais le client
@MaximumGilliard Qui envoie les requêtes HTTP ?HTTP est un protocole client-serveur : les requêtes sont envoyées par une entité : l'agent utilisateur (ou le proxy qui agit au nom de celui-ci).
Qui utilise le protocole http ?Dans les faits on utilise le protocole TCP comme couche de transport. Un serveur HTTP utilise alors par défaut le port 80 (443 pour HTTPS). Les clients HTTP les plus connus sont les navigateurs Web.
Quel est le rôle du serveur lors d'une requête HTTP ?Le serveur Web reçoit la requête HTTP, cherche le fichier désiré (dans l'exemple : la page d'accueil de example.com, c'est-à-dire le fichier index. html) et envoie dans un premier temps l'en-tête qui informe le client à l'origine de la requête du résultat de sa recherche à l'aide d'un code de statut.
Comment s'appelle le logiciel qui joue le rôle du client dans le modèle clientLe logiciel qui joue le rôle du client dans le modèle client/serveur du Web s'appelle: un explorateur de fichier.
|