Apache HttpClient - Authentification du proxy

Dans ce chapitre, nous allons apprendre à créer une HttpRequest authentifiée à l'aide d'un nom d'utilisateur et d'un mot de passe et à la tunneliser via un proxy vers un hôte cible, à l'aide d'un exemple.

Étape 1 - Créer un objet CredentialsProvider

L'interface CredentialsProvider gère une collection pour contenir les informations d'identification de connexion de l'utilisateur. Vous pouvez créer son objet en instanciant la classe BasicCredentialsProvider, l'implémentation par défaut de cette interface.

CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

Étape 2 - Définissez les informations d'identification

Vous pouvez définir les informations d'identification requises pour l'objet CredentialsProvider à l'aide du setCredentials()méthode. Cette méthode accepte deux objets -

  • AuthScope object - Portée d'authentification spécifiant les détails tels que le nom d'hôte, le numéro de port et le nom du schéma d'authentification.

  • Credentials object- Spécification des identifiants (nom d'utilisateur, mot de passe). Définissez les informations d'identification à l'aide dusetCredentials() méthode pour l'hôte et le proxy comme indiqué ci-dessous.

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

Étape 3 - Créez un objet HttpClientBuilder

Créer un HttpClientBuilder en utilisant le custom() méthode de la HttpClients classe comme indiqué ci-dessous -

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

Étape 4 - Définissez le CredentialsProvider

Vous pouvez définir l'objet CredentialsProvider sur un objet HttpClientBuilder à l'aide du setDefaultCredentialsProvider()méthode. Passer le précédemment crééCredentialsProvider objecter à cette méthode.

clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);

Étape 5 - Créez le CloseableHttpClient

Construisez le CloseableHttpClient objet utilisant le build() méthode.

CloseableHttpClient httpclient = clientbuilder.build();

Étape 6 - Créez le proxy et les hôtes cibles

Créez les hôtes cible et proxy en instanciant le HttpHost classe.

//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");

Étape 7 - Définissez le proxy et créez un objet RequestConfig

Créer un RequestConfig.Builder objet utilisant le custom()méthode. Définissez l'objet proxyHost précédemment créé sur leRequestConfig.Builder en utilisant le setProxy()méthode. Enfin, construisez leRequestConfig objet utilisant le build() méthode.

RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();

Étape 8 - Créez un objet de requête HttpGet et définissez-lui l'objet de configuration.

Créer un HttpGetobjet en instanciant la classe HttpGet. Définissez l'objet de configuration créé à l'étape précédente sur cet objet à l'aide dusetConfig() méthode.

//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");

//Setting the config to the request
httpget.setConfig(config);

Étape 9 - Exécutez la demande

Exécutez la requête en passant l'objet HttpHost (cible) et la requête (HttpGet) en tant que paramètres au execute() méthode.

HttpResponse httpResponse = httpclient.execute(targetHost, httpget);

Exemple

L'exemple suivant montre comment exécuter une requête HTTP via un proxy à l'aide d'un nom d'utilisateur et d'un mot de passe.

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

   }
}

Production

Lors de l'exécution, le programme ci-dessus génère la sortie suivante -

HTTP/1.1 200 OK