Apache HttpClient - Autenticación de usuario

Usando HttpClient, puede conectarse a un sitio web que necesita nombre de usuario y contraseña. Este capítulo explica cómo ejecutar una solicitud de cliente en un sitio que solicita nombre de usuario y contraseña.

Paso 1: crear un objeto CredentialsProvider

los CredentialsProviderInterface mantiene una colección para guardar las credenciales de inicio de sesión del usuario. Puede crear su objeto instanciando elBasicCredentialsProvider class, la implementación predeterminada de esta interfaz.

CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

Paso 2: establecer las credenciales

Puede configurar las credenciales requeridas para el objeto CredentialsProvider usando el setCredentials() método.

Este método acepta dos objetos como se indica a continuación:

  • AuthScope object - Alcance de autenticación que especifica los detalles como nombre de host, número de puerto y nombre del esquema de autenticación.

  • Credentials object - Especificando las credenciales (nombre de usuario, contraseña).

Configure las credenciales con el setCredentials() método para host y proxy como se muestra a continuación -

credsProvider.setCredentials(new AuthScope("example.com", 80), 
   new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), 
   new UsernamePasswordCredentials("abc", "passwd"));

Paso 3: crear un objeto HttpClientBuilder

Crear un HttpClientBuilder utilizando la custom() método del HttpClients clase.

//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();

Paso 4: establece las credenciales

Puede configurar el objeto credentialsPovider creado anteriormente en un HttpClientBuilder usando el setDefaultCredentialsProvider() método.

Establezca el objeto CredentialProvider creado en el paso anterior al compilador de clientes pasándolo al CredentialsProvider object() método como se muestra a continuación.

clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);

Paso 5: compila el CloseableHttpClient

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

CloseableHttpClient httpclient = clientbuilder.build()

Paso 6: cree un objeto HttpGet y ejecútelo

Cree un objeto HttpRequest creando una instancia de la clase HttpGet. Ejecute esta solicitud utilizando elexecute() método.

//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");

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

Ejemplo

A continuación se muestra un programa de ejemplo que demuestra la ejecución de una solicitud HTTP en un sitio de destino que requiere autenticación de usuario.

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;

public class UserAuthenticationExample {
   
   public static void main(String args[]) throws Exception{
      
      //Create an object of credentialsProvider
      CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

      //Set the credentials
      AuthScope scope = new AuthScope("https://www.tutorialspoint.com/questions/", 80);
      
      Credentials credentials = new UsernamePasswordCredentials("USERNAME", "PASSWORD");
      credentialsPovider.setCredentials(scope,credentials);

      //Creating the HttpClientBuilder
      HttpClientBuilder clientbuilder = HttpClients.custom();

      //Setting the credentials
      clientbuilder = clientbuilder.setDefaultCredentialsProvider(credentialsPovider);

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

      //Creating a HttpGet object
      HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/questions/index.php");

      //Printing the method used
      System.out.println(httpget.getMethod()); 

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

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());
      int statusCode = httpresponse.getStatusLine().getStatusCode();
      System.out.println(statusCode);

      Header[] headers= httpresponse.getAllHeaders();
      for (int i = 0; i<headers.length;i++) {
         System.out.println(headers[i].getName());
      }
   }
}

Salida

Al ejecutarse, el programa anterior genera la siguiente salida.

GET
HTTP/1.1 200 OK
200