CodeGym /Cours Java /Module 3 /Ajout de corps à HttpRequest

Ajout de corps à HttpRequest

Module 3
Niveau 10 , Leçon 2
Disponible

3.1 Éditeurs de corps

J'espère que vous n'avez pas oublié qu'en plus des requêtes GET , il existe également des requêtes PUT et POST , lorsque vous devez également ajouter à la requête request body, c'est-à-dire le corps de la requête.

HttpRequestLa classe a une classe interne spéciale pour cela BodyPublisher. Bien qu'il s'agisse techniquement d'une interface qui a plusieurs implémentations, dont nous parlerons ci-dessous

Et nous commencerons par le plus simple - l'absence de corps de requête. Oui, ça arrive.


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.noBody())
   .build();

Simple et beau.

3.2 deChaîne()

La deuxième option la plus courante consiste à transmettre une chaîne comme corps de la requête. Cela se fait très simplement :


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "text/plain;charset=UTF-8")
   .POST(HttpRequest.BodyPublishers.ofString("Hello"))
   .build();

Au fait, vous pouvez définir l'encodage de la chaîne transmise. Cela peut être très utile si le serveur http auquel la requête est envoyée ne fonctionne pas sur UTF8.


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
   .build();

3.3 deFichier()

Enfin, vous pouvez joindre un fichier à la requête POST . C'est ainsi que vos avatars sont généralement téléchargés sur le serveur. Pour ce faire, vous devez appeler la méthode ofFile(), où transférer Pathle fichier local :


Path avatar = Path.of("c://avatar.jpeg");
 
HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "image/jpeg")
   .POST(HttpRequest.BodyPublishers.ofFile(avatar))
   .build();

3.4 ofByteArray()

Un autre scénario courant consiste à envoyer un ensemble d'octets au serveur. Par exemple, vous sérialisez un objet sous la forme d'un ensemble d'octets, chiffrez quelque chose ou souhaitez simplement envoyer un tampon de données. Cela nécessite une méthode .ofByteArray().

Cette méthode prend un tableau d'octets en paramètre. Exemple:


byte[] data = "My Secret Message".getBytes();
byte[] dataEncripted = SuperEncriptor.encript(data);
 
HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "application/octet-stream")
   .POST(HttpRequest.BodyPublishers.ofByteArray(dataEncripted))
   .build();

3.5 ofInputStream()

Enfin, le dernier scénario intéressant, mais non le moindre, est l'attachement InputStreamà une requête POST .

Il existe une fonction spéciale pour cela ofInputStream(). Et elle est très intelligente. Il vous permet d'organiser le transfert de données d'un flux à l'autre, de joindre un flux de données à une demande POS qui n'est même pas encore ouverte.

Vous devez passer une fonction à la fonction ofInputStream(), qui renverra un flux en conséquence InputStream.

Exemple:


byte[] data = "My Secret Message".getBytes();
//wrapping an array of bytes into a stream.
InputStream is = new ByteArrayInputStream(data);
 
HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "application/octet-stream")
   .POST(HttpRequest.BodyPublishers.ofInputStream (() -> is;))
   .build();

Je n'ai pas pris la peine de clôturer le jardin ici, mais je pense que vous comprenez le principe. Pourquoi ont-ils fait ça? Vous pouvez presque toujours utiliser le ofByteArray(). Mais si vous souhaitez envoyer des données de manière asynchrone ou si vous devez implémenter un scénario particulièrement complexe, vous pouvez utiliser cette méthode.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION