Apache HttpClient - Autenticazione utente

Utilizzando HttpClient, puoi connetterti a un sito Web che richiedeva nome utente e password. Questo capitolo spiega come eseguire una richiesta client su un sito che richiede nome utente e password.

Passaggio 1: creare un oggetto CredentialsProvider

Il CredentialsProviderL'interfaccia mantiene una raccolta per contenere le credenziali di accesso dell'utente. Puoi creare il suo oggetto istanziando il fileBasicCredentialsProvider class, l'implementazione predefinita di questa interfaccia.

CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

Passaggio 2: impostare le credenziali

È possibile impostare le credenziali richieste per l'oggetto CredentialsProvider utilizzando il setCredentials() metodo.

Questo metodo accetta due oggetti come indicato di seguito:

  • AuthScope object - Ambito di autenticazione che specifica i dettagli come nome host, numero di porta e nome dello schema di autenticazione.

  • Credentials object - Specificare le credenziali (nome utente, password).

Impostare le credenziali utilizzando il setCredentials() metodo sia per l'host che per il proxy come mostrato di seguito:

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

Passaggio 3: creare un oggetto HttpClientBuilder

Creare un HttpClientBuilder usando il custom() metodo del HttpClients classe.

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

Passaggio 4: impostare le credenzialiPovider

È possibile impostare l'oggetto credentialsPovider creato sopra su un HttpClientBuilder utilizzando il setDefaultCredentialsProvider() metodo.

Impostare l'oggetto CredentialProvider creato nel passaggio precedente al generatore di client passandolo al CredentialsProvider object() metodo come mostrato di seguito.

clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);

Passaggio 5: creare il CloseableHttpClient

Costruisci il file CloseableHttpClient oggetto utilizzando il build() metodo del HttpClientBuilder classe.

CloseableHttpClient httpclient = clientbuilder.build()

Passaggio 6: creare un oggetto HttpGet ed eseguirlo

Crea un oggetto HttpRequest creando un'istanza della classe HttpGet. Esegui questa richiesta utilizzando ilexecute() metodo.

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

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

Esempio

Di seguito è riportato un programma di esempio che dimostra l'esecuzione di una richiesta HTTP su un sito di destinazione che richiede l'autenticazione dell'utente.

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

Produzione

All'esecuzione, il programma precedente genera il seguente output.

GET
HTTP/1.1 200 OK
200