Configurar proxies no SDK do Azure para Java
Este artigo fornece uma visão geral de como configurar o SDK do Azure para Java para fazer uso adequado de proxies.
Configuração de proxy HTTP
As bibliotecas de cliente do Azure para Java oferecem várias maneiras de configurar um proxy para um HttpClient
arquivo .
Cada método de fornecimento de um proxy tem seus próprios prós e contras e fornece diferentes níveis de encapsulamento. Quando você tiver configurado um proxy para um HttpClient
, ele usará o proxy pelo resto de sua vida útil. Ter o proxy vinculado a um indivíduo HttpClient
permite que um aplicativo use várias HttpClient
instâncias onde cada um pode usar um proxy diferente para atender aos requisitos de proxy de um aplicativo.
As opções de configuração de proxy são:
Usar um proxy de ambiente
Por padrão, os construtores de clientes HTTP inspecionarão o ambiente em busca de configurações de proxy. Esse processo usa o SDK do Azure para APIs Java Configuration
. Quando o construtor cria um cliente, ele é configurado com uma cópia da 'configuração global' recuperada chamando Configuration.getGlobalConfiguration()
. Esta chamada será lida em qualquer configuração de proxy HTTP do ambiente do sistema.
Quando o construtor inspeciona o ambiente, ele procurará as seguintes configurações de ambiente na ordem especificada:
HTTPS_PROXY
HTTP_PROXY
https.proxy*
http.proxy*
O *
representa as conhecidas propriedades de proxy Java. Para obter mais informações, consulte Java Networking and Proxies na documentação do Oracle.
Se o construtor encontrar qualquer uma das configurações de ambiente, ele criará uma ProxyOptions
instância chamando ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration())
. Este artigo fornece mais detalhes abaixo sobre o ProxyOptions
tipo.
Importante
Para usar qualquer configuração de proxy, o Java requer que você defina a propriedade java.net.useSystemProxies
do ambiente do sistema como true
.
Você também pode criar uma instância de cliente HTTP que não use nenhuma configuração de proxy presente nas variáveis de ambiente do sistema. Para substituir o comportamento padrão, defina explicitamente um configurado Configuration
de forma diferente no construtor de clientes HTTP. Quando você definir um Configuration
no construtor, ele não chamará mais Configuration.getGlobalConfiguration()
. Por exemplo, se você chamar configuration(Configuration)
usando Configuration.NONE
o , poderá impedir explicitamente que o construtor inspecione o ambiente para configuração.
O exemplo a seguir usa a HTTP_PROXY
variável de ambiente com value localhost:8888
para usar Fiddler como proxy. Este código demonstra a criação de um Netty e um cliente HTTP OkHttp. (Para obter mais informações sobre a configuração do cliente HTTP, consulte Clientes HTTP e pipelines.)
export HTTP_PROXY=localhost:8888
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder().build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder().build();
Para impedir que o proxy de ambiente seja usado, configure o construtor de clientes HTTP com Configuration.NONE
, conforme mostrado no exemplo a seguir:
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
Usar um proxy de configuração
Em vez de ler a partir do ambiente, você pode configurar construtores de cliente HTTP para usar um personalizado Configuration
com as mesmas configurações de proxy que já são aceitas do ambiente. Essa configuração oferece a capacidade de ter configurações reutilizáveis com escopo para um caso de uso limitado. Quando o construtor de clientes HTTP estiver criando o , ele usará o HttpClient
ProxyOptions
retorno de ProxyOptions.fromConfiguration(<Configuration passed into the builder>)
.
O exemplo a seguir usa as http.proxy*
configurações definidas em um objeto para usar um Configuration
proxy que autentica o 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();
Usar um proxy explícito
As bibliotecas de cliente Java são fornecidas com uma ProxyOptions
classe que atua como o tipo de bibliotecas de cliente do Azure para configurar um proxy. Você pode configurar ProxyOptions
com o protocolo de rede usado para enviar solicitações de proxy, o endereço de proxy, credenciais de autenticação de proxy e hosts sem proxy. Apenas o protocolo de rede proxy e o endereço proxy são necessários. Ao usar credenciais de autenticação, você deve definir o nome de usuário e a senha.
O exemplo a seguir cria uma instância simples ProxyOptions
que faz proxy de solicitações para o endereço padrão do Fiddler (localhost:8888
):
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));
O exemplo a seguir cria um autenticado ProxyOptions
que faz solicitações de proxies para uma instância do Fiddler que requer autenticação 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");
Você pode configurar construtores de clientes HTTP diretamente ProxyOptions
para indicar um proxy explícito a ser usado. Essa configuração é a maneira mais granular de fornecer um proxy e, geralmente, não é tão flexível quanto passar um Configuration
que você pode mutar para atualizar os requisitos de proxy.
O exemplo a seguir usa ProxyOptions
para usar o 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();
Próximos passos
Agora que você está familiarizado com a configuração de proxy no SDK do Azure para Java, consulte Configurar o rastreamento no SDK do Azure para Java para entender melhor os fluxos em seu aplicativo e ajudar a diagnosticar problemas.