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