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