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é :
HTTPS_PROXY
HTTP_PROXY
https.proxy*
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.