Apache HttpClient - Autenticazione proxy
In questo capitolo, impareremo come creare un HttpRequest autenticato utilizzando nome utente e password e incanalarlo attraverso un proxy a un host di destinazione, utilizzando un esempio.
Passaggio 1: creare un oggetto CredentialsProvider
L'interfaccia CredentialsProvider mantiene una raccolta per contenere le credenziali di accesso dell'utente. È possibile creare il suo oggetto istanziando la classe BasicCredentialsProvider, 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:
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 ilsetCredentials() 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 come mostrato di seguito -
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Passaggio 4: impostare CredentialsProvider
È possibile impostare l'oggetto CredentialsProvider su un oggetto HttpClientBuilder utilizzando il setDefaultCredentialsProvider()metodo. Passa il file precedentemente creatoCredentialsProvider opporsi a questo metodo.
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
Passaggio 5: creare il CloseableHttpClient
Costruisci il file CloseableHttpClient oggetto utilizzando il build() metodo.
CloseableHttpClient httpclient = clientbuilder.build();
Passaggio 6: creare il proxy e gli host di destinazione
Crea la destinazione e gli host proxy istanziando il file HttpHost classe.
//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");
Passaggio 7: impostare il proxy e creare un oggetto RequestConfig
Creare un RequestConfig.Builder oggetto utilizzando il custom()metodo. Imposta l'oggetto proxyHost creato in precedenza suRequestConfig.Builder usando il setProxy()metodo. Infine, crea il fileRequestConfig oggetto utilizzando il build() metodo.
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
Passaggio 8: creare un oggetto richiesta HttpGet e impostarvi l'oggetto config.
Creare un HttpGetoggetto istanziando la classe HttpGet. Impostare l'oggetto di configurazione creato nel passaggio precedente su questo oggetto utilizzando ilsetConfig() metodo.
//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
Passaggio 9: eseguire la richiesta
Eseguire la richiesta passando l'oggetto HttpHost (destinazione) e la richiesta (HttpGet) come parametri al execute() metodo.
HttpResponse httpResponse = httpclient.execute(targetHost, httpget);
Esempio
L'esempio seguente mostra come eseguire una richiesta HTTP tramite un proxy utilizzando nome utente e password.
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
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 ProxyAuthenticationExample {
public static void main(String[] args) throws Exception {
//Creating the CredentialsProvider object
CredentialsProvider credsProvider = new BasicCredentialsProvider();
//Setting the credentials
credsProvider.setCredentials(new AuthScope("example.com", 80),
new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000),
new UsernamePasswordCredentials("abc", "passwd"));
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the credentials
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder.build();
//Create the target and proxy hosts
HttpHost targetHost = new HttpHost("example.com", 80, "http");
HttpHost proxyHost = new HttpHost("localhost", 8000, "http");
//Setting the proxy
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
//Create the HttpGet request object
HttpGet httpget = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
//Printing the status line
HttpResponse response = httpclient.execute(targetHost, httpget);
System.out.println(response.getStatusLine());
}
}
Produzione
In esecuzione, il programma precedente genera il seguente output:
HTTP/1.1 200 OK