

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurar proxies HTTP
<a name="http-config-proxy-support"></a>

Você pode configurar proxies HTTP usando código, definindo propriedades do sistema Java ou definindo variáveis de ambiente.

## Configurar no código
<a name="http-config-proxy-support-in-code"></a>

Você configura proxies no código com um builder `ProxyConfiguration` específico do cliente ao criar o cliente de serviço. O código a seguir mostra um exemplo de configuração de proxy para um cliente HTTP baseado em Apache que é usado por um cliente de serviço do Amazon S3.

```
SdkHttpClient httpClient1 = ApacheHttpClient.builder()
    .proxyConfiguration(ProxyConfiguration.builder()
        .endpoint(URI.create("http://proxy.example.com"))
        .username("username")
        .password("password")
        .addNonProxyHost("localhost")
        .build())
    .build();

S3Client s3Client = S3Client.builder()
    .httpClient(httpClient)
    .build();
```

A seção de cada cliente HTTP neste tópico mostra um exemplo de configuração de proxy.
+ [Cliente HTTP Apache](http-configuration-apache.md#http-configuration-apache-proxy-conf-ex)
+ [URLConnectioncliente HTTP baseado](http-configuration-url.md#http-configuration-url-proxy-conf-ex)
+ [Cliente HTTP baseado em Netty](http-configuration-netty.md#http-config-netty-proxy-ex)
+ [AWS Cliente HTTP baseado em CRT](http-configuration-crt.md#http-config-crt-proxy-ex)

## Configurar proxies HTTP com configurações externas
<a name="http-config-proxy-support-external"></a>

Mesmo que você não use explicitamente um compilador `ProxyConfiguration` no código, o SDK procura configurações externas para definir uma configuração de proxy padrão. 

Por padrão, o SDK primeiro pesquisa as propriedades do sistema de JVM. Se pelo menos uma propriedade for encontrada, o SDK usará o valor e quaisquer outros valores de propriedade do sistema. Se nenhuma propriedade do sistema estiver disponível, o SDK procurará variáveis de ambiente proxy.

O SDK pode usar as seguintes propriedades do sistema Java e variáveis de ambiente.


**Propriedades do sistema Java**  

| Propriedades do sistema | Description | Suporte do cliente HTTP | 
| --- | --- | --- | 
| http.proxyHost | Nome do host do servidor proxy HTTP | Todos | 
| http.proxyPort | Número da porta do servidor proxy HTTP | Todos | 
| http.proxyUser | Nome de usuário para autenticação de proxy HTTP | Todos | 
| http.proxyPassword | Senha para autenticação de proxy HTTP | Todos | 
| http. nonProxyHosts | Lista de hosts que devem ser acessados diretamente, contornando o proxy. [Essa lista também é válida quando o HTTPS é usado](https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html). | Todos | 
| https.proxyHost | Nome do host do servidor proxy HTTPS | Netty, CRT | 
| https.proxyPort | Número da porta do servidor proxy HTTPS | Netty, CRT | 
| https.proxyUser | Nome de usuário para autenticação de proxy HTTPS | Netty, CRT | 
| https.proxyPassword | Senha para autenticação de proxy HTTPS | Netty, CRT | 


**Variáveis de ambiente**  

| Variável de ambiente | Description | Suporte do cliente HTTP | 
| --- | --- | --- | 
| HTTP\_PROXY1 | Um URL válido com um esquema de HTTP | Todos | 
| HTTPS\_PROXY1 | Um URL válido com um esquema de HTTPS | Netty, CRT | 
| NO\_PROXY2 | Lista de hosts que devem ser acessados diretamente, contornando o proxy. A lista é válida tanto para HTTP quanto para HTTPS. | Todos | 

### Exibir notas principais e de rodapé
<a name="http-config-proxy-support-ext-key-footnote"></a>

**Tudo**: todos os clientes HTTP oferecidos pelo SDK: `UrlConnectionHttpClient`, `ApacheHttpClient`, `NettyNioAsyncHttpClient` e `AwsCrtAsyncHttpClient`.

**Netty**: o cliente HTTP baseado em Netty (`NettyNioAsyncHttpClient`).

**CRT** - Os clientes HTTP AWS baseados em CRT, (e)`AwsCrtHttpClient`. `AwsCrtAsyncHttpClient`

1A variável de ambiente consultada, seja `HTTP_PROXY` ou `HTTPS_PROXY`, depende da configuração do esquema na `ProxyConfiguration` do cliente. O esquema padrão é HTTP. O seguinte trecho mostra como alterar o esquema para HTTPS usado para resolução de variáveis de ambiente.

```
SdkHttpClient httpClient = ApacheHttpClient.builder()
    .proxyConfiguration(ProxyConfiguration.builder()
        .scheme("https")
        .build())
    .build();
```

2A variável de ambiente `NO_PROXY` permite uma combinação de separadores “\|” e “,” entre nomes de host. Os nomes de host podem incluir o caractere curinga “\*”.

## Usar uma combinação de configurações
<a name="http-config-proxy-support-combo"></a>

É possível usar uma combinação de configurações de proxy HTTP no código, nas propriedades do sistema e nas variáveis de ambiente. 

**Example – configuração fornecida por uma propriedade do sistema e pelo código**  

```
// Command line with the proxy password set as a system property.
$ java -Dhttp.proxyPassword=SYS_PROP_password -cp ... App

// Since the 'useSystemPropertyValues' setting is 'true' (the default), the SDK will supplement 
// the proxy configuration in code with the 'http.proxyPassword' value from the system property.
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder()
            .proxyConfiguration(ProxyConfiguration.builder()
                    .endpoint(URI.create("http://localhost:1234"))
                    .username("username")
                    .build())
            .build();

// Use the apache HTTP client with proxy configuration.
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
                    .httpClient(apacheHttpClient)
                    .build();
```
O SDK resolve as seguintes configurações de proxy.  

```
Host = localhost
Port = 1234
Password = SYS_PROP_password
UserName = username
Non ProxyHost = null
```

**Example – as propriedades do sistema e as variáveis de ambiente estão disponíveis**  
Cada compilador do `ProxyConfiguration` de cliente HTTP oferece configurações chamadas `useSystemPropertyValues` e `useEnvironmentVariablesValues`. Por padrão, ambas as configurações são `true`. Quando `true`, o SDK usa automaticamente valores de propriedade do sistema ou variáveis de ambiente para opções que não são fornecidas pelo compilador `ProxyConfiguration`.  
Propriedades do sistema têm precedência sobre variáveis de ambiente. Se uma propriedade do sistema de proxy HTTP for encontrada, o SDK recuperará ***todos*** os valores das propriedades do sistema e nenhum das variáveis de ambiente. Se você quiser priorizar as variáveis de ambiente em relação às propriedades do sistema, defina `useSystemPropertyValues` como `false`.
Neste exemplo, as seguintes configurações estão disponíveis no runtime:  

```
// System properties 
http.proxyHost=SYS_PROP_HOST.com
http.proxyPort=2222
http.password=SYS_PROP_PASSWORD
http.user=SYS_PROP_USER

// Environment variables 
HTTP_PROXY="http://EnvironmentUser:EnvironmentPassword@ENV_VAR_HOST:3333"
NO_PROXY="environmentnonproxy.host,environmentnonproxy2.host:1234"
```
O cliente do serviço é criado com uma das declarações a seguir. Nenhuma das declarações define explicitamente uma configuração de proxy.  

```
DynamoDbClient client = DynamoDbClient.create();
DynamoDbClient client = DynamoDbClient.builder().build();
DynamoDbClient client = DynamoDbClient.builder()
    .httpClient(ApacheHttpClient.builder()
        .proxyConfiguration(ProxyConfiguration.builder()
            .build())
        .build())
    .build();
```
As configurações de proxy a seguir são resolvidas pelo SDK:  

```
Host = SYS_PROP_HOST.com
Port = 2222
Password = SYS_PROP_PASSWORD
UserName = SYS_PROP_USER
Non ProxyHost = null
```
Como o cliente de serviço tem configurações de proxy padrão, o SDK pesquisa as propriedades do sistema e, depois, as variáveis de ambiente. Como as configurações de propriedades do sistema têm precedência sobre as variáveis de ambiente, o SDK usa somente propriedades do sistema.  
Se o uso das propriedades do sistema for alterado para `false` conforme mostrado no código a seguir, o SDK resolverá somente as variáveis de ambiente.  

```
DynamoDbClient client = DynamoDbClient.builder()
    .httpClient(ApacheHttpClient.builder()
        .proxyConfiguration(ProxyConfiguration.builder()
            .useSystemPropertyValues(Boolean.FALSE)
            .build())
        .build())
    .build();
```
As configurações de proxy resolvidas usando HTTP são:  

```
Host = ENV_VAR_HOST
Port = 3333
Password = EnvironmentPassword
UserName = EnvironmentUser
Non ProxyHost = environmentnonproxy.host, environmentnonproxy2.host:1234
```