Apache HttpClient: inicio de sesión basado en formularios

Usando la biblioteca HttpClient, puede enviar una solicitud o iniciar sesión en un formulario pasando parámetros.

Siga los pasos que se indican a continuación para iniciar sesión en un formulario.

Paso 1: crea un objeto HttpClient

los createDefault() método del HttpClients clase devuelve un objeto de la clase CloseableHttpClient, que es la implementación base de la interfaz HttpClient. Usando este método, cree un objeto HttpClient -

CloseableHttpClient httpClient = HttpClients.createDefault();

Paso 2: crear un objeto RequestBuilder

La clase RequestBuilderse utiliza para crear una solicitud añadiéndole parámetros. Si el tipo de solicitud es PUT o POST, agrega los parámetros a la solicitud como entidad codificada en URL

Cree un objeto RequestBuilder (de tipo POST) utilizando el método post ().

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

Paso 3: establezca Uri y parámetros en RequestBuilder.

Establezca el URI y los parámetros en el objeto RequestBuilder utilizando el setUri() y addParameter() métodos de la clase RequestBuilder.

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

Paso 4: compila el objeto HttpUriRequest

Después de configurar los parámetros necesarios, cree el HttpUriRequest objeto usando el build() método.

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

Paso 5: ejecutar la solicitud

El método de ejecución del objeto CloseableHttpClient acepta un objeto HttpUriRequest (interfaz) (es decir, HttpGet, HttpPost, HttpPut, HttpHead, etc.) y devuelve un objeto de respuesta.

Ejecute la HttpUriRequest creada en los pasos anteriores pasándola al execute() método.

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

Ejemplo

El siguiente ejemplo demuestra cómo iniciar sesión en un formulario enviando credenciales de inicio de sesión. Aquí, hemos enviado dos parámetros:username and password a un formulario e intentó imprimir la entidad del mensaje y el estado de la solicitud.

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());
   }
}

Salida

Al ejecutarse, el programa anterior genera la siguiente salida:

{
   "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

Formulario de inicio de sesión con cookies

Si su formulario almacena cookies, en lugar de crear predeterminadas CloseableHttpClient objeto.

Create a CookieStore object creando una instancia de la clase BasicCookieStore.

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

Create a HttpClientBuilder utilizando la custom() método del HttpClients clase.

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

Set the cookie store to the client builder utilizando el método setDefaultCookieStore ().

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

Construye el CloseableHttpClient objeto usando el build() método.

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

Construye el HttpUriRequest objeto como se especificó anteriormente pasando ejecutar la solicitud.

Si la página almacena cookies, los parámetros que ha pasado se agregarán al almacén de cookies.

Puede imprimir el contenido del CookieStore objeto donde puedes ver tus parámetros (junto con los anteriores la página almacenada en el caso).

Para imprimir las cookies, obtenga todas las cookies del CookieStore objeto usando el getCookies()método. Este método devuelve unListobjeto. Usando Iterator, imprima el contenido de los objetos de la lista como se muestra a continuación:

//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());
}