Lecture d'un corps de réponse HTTP sous forme de chaîne en Java

Haut REST

Je viens d'annoncer le nouveau cours Learn Spring , axé sur les principes de base de Spring 5 et Spring Boot 2:

>> DÉCOUVREZ LE COURS Java Top

Je viens d'annoncer le nouveau cours Learn Spring , axé sur les principes de base de Spring 5 et Spring Boot 2:

>> VOIR LE COURS

1. Introduction

Dans ce didacticiel, nous explorerons plusieurs bibliothèques pour lire le corps d'une réponse HTTP sous forme de chaîne en Java. Depuis les premières versions, Java a fourni l' API HttpURLConnection . Cela n'inclut que les fonctionnalités de base et est connu pour ne pas être très convivial.

Avec la sortie de JDK 11, Java a introduit la nouvelle API HttpClient améliorée pour gérer la communication HTTP. Nous couvrirons ces bibliothèques et nous vérifierons certaines alternatives telles que Apache HttpClient et le modèle Spring Rest.

2. HttpClient

Comme nous l'avons mentionné précédemment, HttpClient a été ajouté à Java 11. Il nous permet d'accéder aux ressources sur le réseau. Mais, contrairement à HttpURLConnection , HttpClient prend en charge HTTP / 1.1 et HTTP / 2 . De plus, il fournit des types de requêtes synchrones et asynchrones .

HttpClient offre une API moderne avec beaucoup de flexibilité et des fonctionnalités puissantes. Principalement, cette API se compose de trois classes principales: HttpClient , HttpRequest et HttpResponse .

HttpResponse décrit le résultat d'un appel HttpRequest . HttpResponse n'est pas créé directement et est rendu disponible lorsque le corps a été entièrement reçu.

Pour lire un corps de réponse sous forme de chaîne, nous devons d'abord créer un client simple et des objets de requête:

HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(DUMMY_URL)) .build();

Ensuite, nous utilisons simplement BodyHandlers et appelons la méthode ofString () pour renvoyer la réponse:

HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

3. HttpURLConnection

HttpURLConnection est un client HTTP léger utilisé pour accéder aux ressources via le protocole HTTP ou HTTPS et nous permet de créer un InputStream . Une fois que nous avons obtenu le InputStream, nous pouvons le lire comme un fichier local normal.

En Java, les principales classes que nous pouvons utiliser pour accéder à Internet sont la classe java.net.URL et la classe java.net.HttpURLConnection . Tout d'abord, nous utiliserons la classe URL pour pointer vers une ressource Web. Ensuite, nous pouvons y accéder en utilisant la classe HttpURLConnection .

Pour obtenir le corps de la réponse à partir d'une URL sous forme de chaîne , nous devons d'abord créer une HttpURLConnection en utilisant notre URL :

HttpURLConnection connection = (HttpURLConnection) new URL(DUMMY_URL).openConnection();

La nouvelle URL (DUMMY_URL) .openConnection () renvoie une HttpURLConnection . Cet objet nous permet d'ajouter des en-têtes ou de vérifier le code de réponse.

Ensuite, nous allons obtenir le InputStream de la connexion objet:

InputStream inputStream = connection.getInputStream();

Enfin, nous devons convertir le InputStream en String .

4. Apache HttpClient

Dans cette section, nous verrons comment utiliser Apache HttpClient pour lire le corps d'une réponse HTTP sous forme de chaîne.

Pour utiliser cette bibliothèque, nous devons ajouter sa dépendance à notre projet Maven:

 org.apache.httpcomponents httpclient 4.5.12 

Nous pouvons récupérer et envoyer des données via la classe CloseableHttpClient . Pour en créer une instance avec la configuration par défaut, nous pouvons utiliser HttpClients.createDefault () .

CloseableHttpClient fournit une méthode d' exécution pour envoyer et recevoir des données. Cette méthode utilise un paramètre de type HttpUriRequest , qui comporte de nombreuses sous-classes, notamment HttpGet et HttpPost .

Créons d'abord un objet HttpGet :

HttpGet request = new HttpGet(DUMMY_URL);

Deuxièmement, créons le client :

CloseableHttpClient client = HttpClients.createDefault();

Troisièmement, nous récupérons l'objet de réponse à partir du résultat de la méthode execute :

CloseableHttpResponse response = client.execute(request);

Enfin, nous renvoyons le corps de la réponse en convertissant l'entité de réponse en String :

HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity);

5. Spring RestTemplate

Dans cette section, nous verrons comment utiliser Spring RestTemplate pour lire un corps de réponse HTTP sous forme de chaîne.

La classe RestTemplate est un outil essentiel fourni par Spring qui offre un modèle simple pour effectuer des opérations HTTP côté client sur des bibliothèques client HTTP sous-jacentes telles que JDK HttpURLConnection , Apache HttpClient , etc.

RestTemplate fournit des méthodes utiles pour créer des requêtes HTTP et gérer les réponses.

Nous pouvons utiliser cette bibliothèque en ajoutant d'abord quelques dépendances à notre projet Maven:

 org.springframework.boot spring-boot-starter-web ${spring-boot.version}   org.springframework.boot spring-boot-starter-test ${spring-boot.version} test 

Pour faire une requête Web et renvoyer le corps de la réponse sous forme de chaîne, créons d' abord une instance de RestTemplate :

RestTemplate restTemplate = new RestTemplate();

Deuxièmement, nous obtenons l'objet de réponse en appelant la méthode getForObject () , en passant l'URL et le type de réponse souhaité - nous utiliserons String.class dans notre exemple:

String response = restTemplate.getForObject(DUMMY_URL, String.class);

6. Conclusion

Dans cet article, nous avons vu comment utiliser plusieurs bibliothèques pour lire un corps de réponse HTTP sous forme de chaîne .

Comme d'habitude, le code complet est disponible sur sur GitHub.

REST bas

Je viens d'annoncer le nouveau cours Learn Spring , axé sur les principes de base de Spring 5 et Spring Boot 2:

>> DÉCOUVREZ LE COURS Java bottom

Je viens d'annoncer le nouveau cours Learn Spring , axé sur les principes de base de Spring 5 et Spring Boot 2:

>> VOIR LE COURS