Configurer des proxies dans le kit de développement logiciel (SDK) Azure pour Java

Cet article fournit une vue d’ensemble de la configuration du kit de développement logiciel Azure pour Java afin d’utiliser correctement les proxies.

Configuration du proxy HTTP

Les bibliothèques clientes Azure pour Java offrent plusieurs manières de configurer un proxy pour un HttpClient.

Chaque méthode de fourniture d’un proxy présente ses propres avantages et inconvénients et fournit différents niveaux d’encapsulation. Lorsque vous avez configuré un proxy pour un HttpClient, il utilise le proxy pour le reste de sa durée de vie. Le fait d’avoir le proxy lié à un HttpClient individuel permet à une application d’utiliser plusieurs instances de HttpClient, où chacune peut utiliser un proxy différent pour répondre aux exigences de proxy de l’application.

Voici les options de configuration de proxy :

Utiliser un proxy d’environnement

Par défaut, les générateurs de clients HTTP inspectent l’environnement pour les configurations de proxy. Ce processus utilise le kit de développement logiciel (SDK) Azure pour les API Configuration Java. Lorsque le générateur crée un client, il est configuré avec une copie de la « configuration globale » récupérée en appelant Configuration.getGlobalConfiguration(). Cet appel peut être lu dans n’importe quelle configuration de proxy HTTP de l’environnement système.

Lorsque le générateur inspecte l’environnement, il recherche les configurations d’environnement suivantes dans l’ordre spécifié :

  1. HTTPS_PROXY
  2. HTTP_PROXY
  3. https.proxy*
  4. http.proxy*

Le * représente les propriétés de proxy Java connues. Pour plus d’informations, consultez Mise en réseau et proxys Java dans la documentation Oracle.

Si le générateur trouve des configurations d’environnement, il crée une instance ProxyOptions en appelant ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()). Cet article fournit plus de détails ci-dessous sur le type de ProxyOptions.

Important

Pour utiliser une configuration de proxy, Java vous oblige à définir la propriété d’environnement système java.net.useSystemProxies sur true.

Vous pouvez également créer une instance de client HTTP qui n’utilise pas de configuration de proxy présente dans les variables d’environnement système. Pour remplacer le comportement par défaut, vous devez définir explicitement une Configuration configurée différemment dans le générateur client HTTP. Quand vous définissez une Configuration dans le générateur, Configuration.getGlobalConfiguration() n’est plus appelé. Par exemple, si vous appelez configuration(Configuration) à l’aide de Configuration.NONE, vous pouvez explicitement empêcher le générateur d’inspecter l’environnement à des fins de configuration.

L’exemple suivant utilise la variable d’environnement HTTP_PROXY avec la valeur localhost:8888 pour utiliser Fiddler en tant que proxy. Ce code illustre la création d’un Netty et d’un client HTTP OkHttp. (Pour plus d’informations sur la configuration du client HTTP, consultez Clients et pipelines HTTP.)

export HTTP_PROXY=localhost:8888
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder().build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder().build();

Pour empêcher l’utilisation du proxy d’environnement, configurez le générateur client HTTP avec Configuration.NONE, comme indiqué dans l’exemple suivant :

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .configuration(Configuration.NONE)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .configuration(Configuration.NONE)
    .build();

Utiliser un proxy de configuration

Au lieu de lire à partir de l’environnement, vous pouvez configurer les générateurs de clients HTTP pour qu’ils utilisent une Configuration personnalisée avec les mêmes paramètres de proxy déjà acceptés à partir de l’environnement. Cette configuration offre la possibilité d’avoir des configurations réutilisables dont l’étendue est limitée à un cas d’usage limité. Lorsque le générateur client HTTP génère le HttpClient, il utilise le ProxyOptions retourné par ProxyOptions.fromConfiguration(<Configuration passed into the builder>).

L’exemple suivant utilise les configurations de http.proxy* définies dans un objet Configuration pour utiliser un proxy qui authentifie Fiddler en tant que proxy.

Configuration configuration = new Configuration()
    .put("java.net.useSystemProxies", "true")
    .put("http.proxyHost", "localhost")
    .put("http.proxyPort", "8888")
    .put("http.proxyUser", "1")
    .put("http.proxyPassword", "1");

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .configuration(configuration)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .configuration(configuration)
    .build();

Utiliser un proxy explicite

Les bibliothèques clientes Java sont fournies avec une classe ProxyOptions qui fait office de type de bibliothèques clientes Azure pour la configuration d’un proxy. Vous pouvez configurer ProxyOptions avec le protocole réseau utilisé pour envoyer des requêtes de proxy, l’adresse proxy, les informations d’authentification de proxy et les hôtes sans proxy. Seul le protocole réseau proxy et l’adresse proxy sont requis. Lorsque vous utilisez des informations d’identification d’authentification, vous devez définir le nom d’utilisateur et le mot de passe.

L’exemple suivant crée une instance ProxyOptions simple qui transmet les requêtes à l’adresse Fiddler par défaut (localhost:8888) :

ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));

L’exemple suivant crée un ProxyOptions authentifié qui transmet les requêtes à une instance Fiddler qui requiert l’authentification proxy :

// Fiddler uses username "1" and password "1" with basic authentication as its proxy authentication requirement.
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888))
    .setCredentials("1", "1");

Vous pouvez configurer des générateurs de clients HTTP avec ProxyOptions directement pour indiquer un proxy explicite à utiliser. Cette configuration est la manière la plus granulaire de fournir un proxy et n’est généralement pas aussi flexible que la transmission d’une Configuration que vous pouvez muter pour mettre à jour les exigences de proxy.

L’exemple suivant utilise ProxyOptions pour utiliser Fiddler en tant que proxy :

ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .proxy(proxyOptions)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .proxy(proxyOptions)
    .build();

Étapes suivantes

Maintenant que vous êtes familiarisé avec la configuration du proxy dans le kit de développement logiciel (SDK) Azure pour Java, consultez Configurer le suivi dans le kit de développement logiciel (SDK) Azure pour Java pour mieux comprendre les flux dans votre application et pour aider à diagnostiquer les problèmes.