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 HttpClientarquivo .

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:

  1. HTTPS_PROXY
  2. HTTP_PROXY
  3. https.proxy*
  4. 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.NONEo , 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 HttpClientProxyOptions 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.