

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 o cliente HTTP baseado em Apache
<a name="http-configuration-apache"></a>

Os clientes de serviço síncrono AWS SDK for Java 2.x usam um cliente HTTP baseado em Apache, por padrão. [ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html) O SDK `ApacheHttpClient` é baseado no [HttpClient](https://hc.apache.org/httpcomponents-client-4.5.x/index.html)Apache.

O SDK também oferece o [UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html), que carrega mais rapidamente, mas tem menos recursos. Para obter mais informações sobre a configuração do `UrlConnectionHttpClient`, consulte [Configurar o cliente HTTP URLConnection baseado](http-configuration-url.md). 

Para ver o conjunto completo de opções de configuração disponíveis para o`ApacheHttpClient`, consulte [ApacheHttpClient.Builder e [ProxyConfiguration.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ProxyConfiguration.Builder.html)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html).

## Acesse o `ApacheHttpClient`
<a name="http-apache-dependency"></a>

Na maioria das situações, você usa o `ApacheHttpClient` sem nenhuma configuração explícita. Você vai declarar os clientes de serviço e o SDK vai configurar o `ApacheHttpClient` com valores padrão para você.

Se você quiser configurar o `ApacheHttpClient` explicitamente ou usá-lo com vários clientes de serviço, precisará disponibilizá-lo para configuração.

### Nenhuma configuração necessária
<a name="http-config-apache-no-config"></a>

Quando você declara uma dependência de um cliente de serviço no Maven, o SDK adiciona uma dependência de *tempo de execução* ao artefato `apache-client`. Isso torna a classe `ApacheHttpClient` disponível para o código em runtime, mas não no momento da compilação. Se você não estiver configurando o cliente HTTP baseado em Apache, não precisará especificar uma dependência para ele.

No seguinte trecho XML de um arquivo `pom.xml` do Maven, a dependência declarada com `<artifactId>s3</artifactId>` traz automaticamente o cliente HTTP baseado em Apache. Você não precisa declarar uma dependência especificamente para isso.

```
<dependencyManagement>
   <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.27.21</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient-->
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
</dependencies>
```

Com essas dependências, você não pode fazer nenhuma alteração explícita na configuração HTTP, porque a biblioteca `ApacheHttpClient` está somente no caminho de classe em tempo de execução. 

### Configuração necessária
<a name="http-config-apache-yes-config"></a>

Para configurar o `ApacheHttpClient`, você precisa adicionar uma dependência na biblioteca `apache-client` em tempo de *compilação*. 

Consulte o exemplo a seguir de um arquivo `pom.xml` do Maven para configurar o `ApacheHttpClient`.

```
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>2.27.21</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
        </dependency>
        <!-- By adding the apache-client dependency, ApacheHttpClient will be added to 
             the compile classpath so you can configure it. -->
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>apache-client</artifactId>
        </dependency>
    </dependencies>
```

## Usar e configurar o `ApacheHttpClient`
<a name="http-apache-config"></a>

Você pode configurar uma instância do `ApacheHttpClient` junto com a criação de um cliente de serviço ou pode configurar uma única instância para compartilhar entre vários clientes de serviço. 

Com qualquer abordagem, você usa o `[ApacheHttpClient.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html)` para configurar as propriedades do cliente HTTP baseado em Apache.

### Prática recomendada: dedicar uma instância do `ApacheHttpClient` a um cliente de serviço
<a name="http-config-apache-recomm"></a>

Se você precisar configurar uma instância do `ApacheHttpClient`, recomendamos que você crie a instância `ApacheHttpClient` dedicada. Faça isso usando o método `httpClientBuilder` do builder do cliente do serviço. Dessa forma, o ciclo de vida do cliente HTTP é gerenciado pelo SDK, o que ajuda a evitar possíveis vazamentos de memória se a instância do `ApacheHttpClient` não for fechada quando não for mais necessária.

O exemplo a seguir cria um`S3Client` e configura a instância embutida do `ApacheHttpClient` com os valores `maxConnections` e `connectionTimeout`. A instância HTTP é criada usando o método `httpClientBuilder` do `S3Client.Builder`.

 **Importações** 

```
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
```

 **Código** 

```
S3Client s3Client = S3Client   // Singleton: Use the s3Client for all requests.
    .builder()
    .httpClientBuilder(ApacheHttpClient.builder()
        .maxConnections(100)
        .connectionTimeout(Duration.ofSeconds(5))
    ).build();

// Perform work with the s3Client.

s3Client.close();   // Requests completed: Close all service clients.
```

### Abordagem alternativa: compartilhar uma instância do `ApacheHttpClient`
<a name="http-config-apache-alt"></a>

Para ajudar a reduzir o uso de recursos e memória do seu aplicativo, você pode configurar um `ApacheHttpClient` e compartilhá-lo entre vários clientes de serviço. O pool de conexões HTTP será compartilhado, o que reduz o uso de recursos.

**nota**  
Quando uma instância do `ApacheHttpClient` é compartilhada, você deve fechá-la quando ela estiver pronta para ser descartada. O SDK não fechará a instância quando o cliente de serviço for fechado.

O exemplo a seguir configura um cliente HTTP baseado em Apache, que é usado por dois clientes de serviço. A instância `ApacheHttpClient` configurada é transmitida ao método `httpClient` de cada construtor. Quando os clientes do serviço e o cliente HTTP não são mais necessários, o código os fecha explicitamente. O código fecha o cliente HTTP por último.

**Importações**

```
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.s3.S3Client;
```

 **Código** 

```
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder()
        .maxConnections(100).build();

// Singletons: Use the s3Client and dynamoDbClient for all requests.
S3Client s3Client = 
    S3Client.builder()
            .httpClient(apacheHttpClient).build();

DynamoDbClient dynamoDbClient = 
    DynamoDbClient.builder()
                  .httpClient(apacheHttpClient).build();

// Perform work with the s3Client and dynamoDbClient.

// Requests completed: Close all service clients.
s3Client.close();
dynamoDbClient.close();
apacheHttpClient.close();  // Explicitly close apacheHttpClient.
```

## Exemplo de configuração do proxy
<a name="http-configuration-apache-proxy-conf-ex"></a>

O trecho de código a seguir usa o [builder de configuração de proxy para o cliente Apache HTTP](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ProxyConfiguration.Builder.html).

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

As propriedades equivalentes do sistema Java para a configuração do proxy são mostradas no trecho da linha de comando a seguir.

```
$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \
-Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
```

A configuração equivalente que usa variáveis de ambiente é:

```
// Set the following environment variables.
// $ export HTTP_PROXY="http://username:password@example.com:1234"
// $ export NO_PROXY="localhost|host.example.com"

// Set the 'useSystemPropertyValues' to false on the proxy configuration.
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder()
                .proxyConfiguration(ProxyConfiguration.builder()
                        .useSystemPropertyValues(Boolean.FALSE)
                        .build())
                .build();

// Run the application.
// $ java -cp ... App
```

**nota**  
Atualmente, o cliente Apache HTTP não é compatível com as propriedades do sistema do proxy HTTPS nem com a variável de ambiente HTTPS\$1PROXY.