Apache HttpClient - Connexion basée sur un formulaire

En utilisant la bibliothèque HttpClient, vous pouvez envoyer une demande ou vous connecter à un formulaire en passant des paramètres.

Suivez les étapes ci-dessous pour vous connecter à un formulaire.

Étape 1 - Créer un objet HttpClient

le createDefault() méthode de la HttpClients class renvoie un objet de la classe CloseableHttpClient, qui est l'implémentation de base de l'interface HttpClient. À l'aide de cette méthode, créez un objet HttpClient -

CloseableHttpClient httpClient = HttpClients.createDefault();

Étape 2 - Créer un objet RequestBuilder

La classe RequestBuilderest utilisé pour créer une requête en y ajoutant des paramètres. Si le type de demande est PUT ou POST, il ajoute les paramètres à la demande en tant qu'entité encodée en URL

Créez un objet RequestBuilder (de type POST) à l'aide de la méthode post ().

//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post();

Étape 3 - Définissez l'URI et les paramètres sur RequestBuilder.

Définissez l'URI et les paramètres sur l'objet RequestBuilder à l'aide du setUri() et addParameter() méthodes de la classe RequestBuilder.

//Set URI and parameters
RequestBuilder reqbuilder = reqbuilder.setUri("http://httpbin.org/post");
reqbuilder = reqbuilder1.addParameter("Name", "username").addParameter("password", "password");

Étape 4 - Générez l'objet HttpUriRequest

Après avoir défini les paramètres requis, créez le HttpUriRequest objet utilisant le build() méthode.

//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();

Étape 5 - Exécutez la demande

La méthode execute de l'objet CloseableHttpClient accepte un objet HttpUriRequest (interface) (c'est-à-dire HttpGet, HttpPost, HttpPut, HttpHead etc.) et renvoie un objet de réponse.

Exécutez la requête HttpUriRequest créée lors des étapes précédentes en la transmettant au execute() méthode.

//Execute the request
HttpResponse httpresponse = httpclient.execute(httppost);

Exemple

L'exemple suivant montre comment se connecter à un formulaire en envoyant des informations de connexion. Ici, nous avons envoyé deux paramètres -username and password dans un formulaire et a essayé d'imprimer l'entité du message et l'état de la demande.

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;

public class FormLoginExample {
 
   public static void main(String args[]) throws Exception {

      //Creating CloseableHttpClient object
      CloseableHttpClient httpclient = HttpClients.createDefault();
 
      //Creating the RequestBuilder object
      RequestBuilder reqbuilder = RequestBuilder.post();

      //Setting URI and parameters
      RequestBuilder reqbuilder1 = reqbuilder.setUri("http://httpbin.org/post");
      RequestBuilder reqbuilder2 = reqbuilder1.addParameter("Name", 
         "username").addParameter("password", "password");

      //Building the HttpUriRequest object
      HttpUriRequest httppost = reqbuilder2.build();

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httppost);

      //Printing the status and the contents of the response
      System.out.println(EntityUtils.toString(httpresponse.getEntity()));
      System.out.println(httpresponse.getStatusLine());
   }
}

Production

Lors de l'exécution, le programme ci-dessus génère la sortie suivante -

{
   "args": {},
   "data": "",
   "files": {},
   "form": {
      "Name": "username",
      "password": "password"
   },
   "headers": {
      "Accept-Encoding": "gzip,deflate",
      "Connection": "close",
      "Content-Length": "31",
      "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8",
      "Host": "httpbin.org",
      "User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
   },
   "json": null,
   "origin": "117.216.245.180",
   "url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK

Connexion par formulaire avec cookies

Si votre formulaire stocke des cookies, au lieu de créer par défaut CloseableHttpClient objet.

Create a CookieStore object en instanciant la classe BasicCookieStore.

//Creating a BasicCookieStore object
BasicCookieStore cookieStore = new BasicCookieStore();

Create a HttpClientBuilder en utilisant le custom() méthode de la HttpClients classe.

//Creating an HttpClientBuilder object
HttpClientBuilder clientbuilder = HttpClients.custom();

Set the cookie store to the client builder en utilisant la méthode setDefaultCookieStore ().

//Setting default cookie store to the client builder object
Clientbuilder = clientbuilder.setDefaultCookieStore(cookieStore);

Construisez le CloseableHttpClient objet utilisant le build() méthode.

//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder1.build();

Construisez le HttpUriRequest objet comme spécifié ci-dessus en passant exécutez la requête.

Si la page stocke des cookies, les paramètres que vous avez transmis seront ajoutés au magasin de cookies.

Vous pouvez imprimer le contenu du CookieStore objet où vous pouvez voir vos paramètres (avec les précédents la page stockée dans le cas).

Pour imprimer les cookies, récupérez tous les cookies du CookieStore objet utilisant le getCookies()méthode. Cette méthode renvoie unListobjet. À l'aide d'Iterator, imprimez le contenu des objets de la liste comme indiqué ci-dessous -

//Printing the cookies
List list = cookieStore.getCookies();

System.out.println("list of cookies");
Iterator it = list.iterator();
if(it.hasNext()) {
   System.out.println(it.next());
}