méthodes newBuilder(), build()

La classe HttpRequest est utilisée pour décrire une requête http, facile à comprendre à partir de son nom. Cet objet ne fait rien par lui-même, il contient juste diverses informations sur la requête http. Par conséquent, comme vous le devinez probablement déjà, le modèle Builder est également utilisé pour le créer.

HttpRequest request = HttpRequest.newBuilder()
	.method1()
	.method2()
	.methodN()
    .build();

Où entre les appels aux méthodes newBuilder() et build() vous devez appeler toutes les méthodes pour construire un objetDemande HTTP.

Un exemple de requête simple ressemble à ceci :

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(“http://codegym.cc”))
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

Vous pouvez trouver toutes les méthodes de la classe HttpRequest sur le lien dans la documentation officielle .

Et puis nous analyserons les plus populaires d'entre eux.

méthode uri()

En utilisant la méthode uri() , vous pouvez définir l'URI (ou URL) à laquelle la requête http sera envoyée. Exemple:

HttpRequest request = HttpRequest.newBuilder()
    .uri( URI.create(“http://codegym.cc”) )
    .build();

Au fait, vous pouvez rendre ce code un peu plus court en passant l'URI directement à la méthode newBuilder() :

HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();

Important! Un URI peut être créé de deux manières :

  • nouvelleURI(chaîne)
  • URI.create(String)

La deuxième façon est préférable. La première méthode, malheureusement, n'est pas très bonne, car le constructeur d'URI est déclaré comme public URI(String str) throws URISyntaxException , et URISyntaxException est une exception vérifiée.

Méthodes GET(), POST(), PUT(), DELETE()

Vous pouvez définir la méthode de requête HTTP à l'aide des méthodes suivantes :

  • OBTENIR()
  • POSTE()
  • METTRE()
  • SUPPRIMER()

Voici à quoi ressemblerait une simple requête GET :

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

méthode version()

Vous pouvez également définir la version du protocole HTTP. Il n'y a que 2 options :

  • HttpClient.Version.HTTP_1_1
  • HttpClient.Version.HTTP_2

Disons que vous voulez créer une requête en utilisant le protocole HTTP/2, alors vous devrez écrire :

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .version( HttpClient.Version.HTTP_2 )
   .GET()
   .build();

Très simple, n'est-ce pas ? :)

méthode timeout()

Vous pouvez également définir le temps d'exécution de la requête. S'il réussit et que la demande n'est jamais terminée, une HttpTimeoutException sera levée .

L'heure elle-même est définie à l'aide de l'objetduréeà partir de l'API Java DateTime. Exemple:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .timeout( Duration.of(5, SECONDS) )
   .GET()
   .build();

La présence de cette méthode montre que les classes HttpClient et HttpRequest peuvent effectuer diverses tâches. Imaginez que vous exécutez une requête et que quelque chose se passe sur le réseau et que cela dure 30 secondes. Il est beaucoup plus utile de recevoir immédiatement une exception et d'y réagir correctement.

méthode header()

Vous pouvez également ajouter n'importe quel nombre d'en-têtes à n'importe quelle demande. Et c'est aussi facile à faire qu'autre chose. Il existe une méthode spéciale pour cela - header() . Exemple:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .header("name1", "value1")
   .header("name2", "value2")
   .GET()
   .build();

Il existe un autre moyen alternatif de définir plusieurs en-têtes à la fois. Cela peut être utile si, par exemple, vous avez converti une liste d'en-têtes en un tableau :

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("name1", "value1", "name2", "value2")
   .GET()
   .build();

Tout ce qui est élémentaire est simple.