Configuración de servidores proxy en Azure SDK para Java
En este artículo se proporciona información general sobre cómo configurar Azure SDK para Java con el fin de hacer un uso correcto de los servidores proxy.
Configuración de proxy HTTP
Las bibliotecas cliente de Azure para Java ofrecen varias maneras de configurar un proxy para una instancia de HttpClient
.
Cada método de suministrar un proxy tiene sus propias ventajas e inconvenientes y proporciona distintos niveles de encapsulación. Cuando haya configurado un proxy para una instancia de HttpClient
, lo usará durante toda su vigencia. Tener el proxy vinculado a una sola instancia de HttpClient
permite que una aplicación use varias instancias de HttpClient
, donde cada una puede emplear un proxy diferente para cumplir los requisitos de redirección mediante proxy de una aplicación.
Las opciones de configuración del proxy son:
Uso de un proxy de entorno
De forma predeterminada, los generadores de clientes HTTP inspeccionarán las configuraciones de proxy del entorno. En este proceso se usan las API Configuration
de Azure SDK para Java. Cuando el generador crea un cliente, se configura con una copia de la "configuración global" recuperada mediante una llamada a Configuration.getGlobalConfiguration()
. Esta llamada leerá cualquier configuración de proxy HTTP del entorno del sistema.
Cuando el generador inspeccione el entorno, buscará las siguientes configuraciones de entorno en el orden especificado:
HTTPS_PROXY
HTTP_PROXY
https.proxy*
http.proxy*
El *
representa las propiedades conocidas del proxy de Java. Para más información, consulte Redes y servidores proxy de Java en la documentación de Oracle.
Si el generador encuentra alguna de las configuraciones de entorno, crea una instancia de ProxyOptions
mediante la llamada a ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration())
. En este artículo se proporcionan más detalles sobre el tipo ProxyOptions
.
Importante
Para usar cualquier configuración de proxy en Java, es necesario que se establezca la propiedad del entorno del sistema java.net.useSystemProxies
en true
.
También puede crear una instancia de cliente HTTP que no use ninguna configuración de proxy presente en las variables de entorno del sistema. Para invalidar el comportamiento predeterminado, establecerá explícitamente un valor de Configuration
configurado de forma diferente en el generador de clientes HTTP. Al establecer un valor de Configuration
en el generador, ya no se llamará a Configuration.getGlobalConfiguration()
. Por ejemplo, si llama a configuration(Configuration)
mediante Configuration.NONE
, puede impedir explícitamente que el generador inspeccione la configuración del entorno.
En el ejemplo siguiente se emplea la variable de entorno HTTP_PROXY
con el valor localhost:8888
para usar Fiddler como proxy. Este código muestra la creación de una instancia de Netty y un cliente HTTP OkHttp. (Para más información sobre la configuración del cliente HTTP, consulte Clientes y canalizaciones HTTP).
export HTTP_PROXY=localhost:8888
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder().build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder().build();
Para evitar que se use el proxy del entorno, configure el generador de clientes HTTP con Configuration.NONE
, como se muestra en el ejemplo siguiente:
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
Uso de un proxy de configuración
En lugar de leer del entorno, puede configurar generadores de clientes HTTP para que utilicen un valor de Configuration
personalizado con la misma configuración de proxy que ya se aceptó del entorno. Esta configuración ofrece la posibilidad de tener configuraciones reutilizables que tienen como ámbito un caso de uso limitado. Cuando el generador de clientes HTTP está compilando la instancia de HttpClient
, se usa el valor de ProxyOptions
devuelto por ProxyOptions.fromConfiguration(<Configuration passed into the builder>)
.
En el ejemplo siguiente se emplean las configuraciones de http.proxy*
establecidas en un objeto Configuration
para usar un proxy que autentique Fiddler como 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();
Uso de un proxy explícito
Las bibliotecas cliente de Java vienen con una clase ProxyOptions
que actúa como el tipo de bibliotecas cliente de Azure para configurar un proxy. Se puede configurar ProxyOptions
con el protocolo de red usado para enviar solicitudes de proxy, la dirección del proxy, las credenciales de autenticación del proxy y los hosts que no son de redirección mediante proxy. Lo único que se necesita es el protocolo de red proxy y la dirección del proxy. Al usar credenciales de autenticación, debe establecer el nombre de usuario y la contraseña.
En el ejemplo siguiente se crea una instancia de ProxyOptions
sencilla que redirige mediante proxy las solicitudes a la dirección predeterminada de Fiddler (localhost:8888
):
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));
En el ejemplo siguiente se crea una instancia de ProxyOptions
autenticada que redirige mediante proxy las solicitudes a una instancia de Fiddler que requiere autenticación de 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");
Puede configurar generadores de clientes HTTP directamente con ProxyOptions
para indicar el proxy explícito que se usará. Esta configuración es la manera más granular de proporcionar un proxy y, por lo general, no es tan flexible como pasar un valor de Configuration
que se puede mutar para actualizar los requisitos de redirección mediante proxy.
En el ejemplo siguiente se emplea ProxyOptions
para usar Fiddler como 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();
Pasos siguientes
Ahora que está familiarizado con la configuración de proxy en Azure SDK para Java, consulte Configuración del seguimiento en Azure SDK para Java para comprender mejor los flujos dentro de la aplicación y para ayudar a diagnosticar problemas.