

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 URLConnection baseado
<a name="http-configuration-url"></a>

O AWS SDK for Java 2.x oferece um cliente `[UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html)` HTTP mais leve em comparação com o padrão. `ApacheHttpClient` O `UrlConnectionHttpClient` é baseado no `[URLConnection](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/URLConnection.html)` do Java.

O `UrlConnectionHttpClient` é carregado mais rapidamente do que o cliente HTTP baseado em Apache, mas tem menos recursos. Por carregar mais rapidamente, é uma [boa solução](lambda-optimize-starttime.md) para funções AWS Lambda do Java.

O `UrlConnectionHttpClient` possui várias [opções configuráveis](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html) que você pode acessar.

**nota**  
O `UrlConnectionHttpClient` não é compatível com o método HTTP PATCH.   
Algumas operações de AWS API exigem solicitações de PATCH. Esses nomes de operação geralmente começam com `Update*`. Veja alguns exemplos a seguir.  
[Várias `Update*` operações](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_Operations.html) na AWS Security Hub CSPM API e também a [BatchUpdateFindings](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_BatchUpdateFindings.html)operação
Todas as [operações `Update*`](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html) da API do Amazon API Gateway
Se você puder usar o`UrlConnectionHttpClient`, primeiro consulte a Referência da API para o AWS service (Serviço da AWS) que você está usando. Verifique se as operações necessárias usam a operação PATCH.

## Acesse o `UrlConnectionHttpClient`
<a name="http-url-dependency"></a>

Para configurar e usar o `UrlConnectionHttpClient`, você declara uma dependência do artefato `url-connection-client` do Maven em seu arquivo `pom.xml`.

Ao contrário do `ApacheHttpClient`, o `UrlConnectionHttpClient` não é adicionado automaticamente ao seu projeto; portanto, quando usado, ele deve ser declarado especificamente.

O exemplo de arquivo `pom.xml` a seguir mostra as dependências necessárias para usar e configurar o cliente HTTP.

```
<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>

<!-- other dependencies such as s3 or dynamodb -->

<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>url-connection-client</artifactId>
    </dependency>
</dependencies>
```

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

Você pode configurar uma instância do `UrlConnectionHttpClient` 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 [UrlConnectionHttpClient.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html) para configurar as propriedades do cliente HTTP URLConnection baseado.

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

Se você precisar configurar uma instância do `UrlConnectionHttpClient`, recomendamos que você crie a instância `UrlConnectionHttpClient` 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 `UrlConnectionHttpClient` 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 `UrlConnectionHttpClient` com os valores `socketTimeout` e `proxyConfiguration`. O método `proxyConfiguration` usa uma expressão lambda Java do tipo ` Consumer<[ProxyConfiguration.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/ProxyConfiguration.Builder.html)>`.

 **Importações** 

```
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
import java.net.URI;
import java.time.Duration;
```

 **Código** 

```
// Singleton: Use the s3Client for all requests.
S3Client s3Client = 
    S3Client.builder()
            .httpClientBuilder(UrlConnectionHttpClient.builder()
                    .socketTimeout(Duration.ofMinutes(5))
                    .proxyConfiguration(proxy -> proxy.endpoint(URI.create("http://proxy.mydomain.net:8888"))))
            .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
            .build();

// Perform work with the s3Client.

s3Client.close();   // Requests completed: Close the s3client.
```

### Abordagem alternativa: compartilhar uma instância do `UrlConnectionHttpClient`
<a name="http-config-url-multi-clients"></a>

Para ajudar a reduzir o uso de recursos e memória do seu aplicativo, você pode configurar um `UrlConnectionHttpClient` 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 `UrlConnectionHttpClient` é 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 URLConnection baseado que é usado por dois clientes de serviço. A instância `UrlConnectionHttpClient` configurada é transmitida ao método `httpClient` de cada criador. 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.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.urlconnection.ProxyConfiguration;
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.net.URI;
import java.time.Duration;
```

 **Código** 

```
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.create();

// Singletons: Use the s3Client and dynamoDbClient for all requests.
S3Client s3Client = 
    S3Client.builder()
            .httpClient(urlHttpClient)
            .defaultsMode(DefaultsMode.IN_REGION)
            .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
            .build();

DynamoDbClient dynamoDbClient = 
    DynamoDbClient.builder()
                  .httpClient(urlHttpClient)
                  .defaultsMode(DefaultsMode.IN_REGION)
                  .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
                  .build();

// Perform work with the s3Client and dynamoDbClient.

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

#### Usar `URLConnectionHttpClient` e `ApacheHttpClient` em conjunto
<a name="http-config-url-caveat"></a>

Ao usar o `UrlConnectionHttpClient` na aplicação, é necessário fornecer a cada cliente de serviço uma instância `URLConnectionHttpClient` ou `ApacheHttpClient` usando o método `httpClientBuilder` do criador do cliente de serviço. 

Uma exceção ocorre se o programa usar vários clientes do serviço e estas duas condições forem verdadeiras:
+ Um cliente de serviço está configurado para usar uma instância do `UrlConnectionHttpClient`
+ Outro cliente de serviço usa o `ApacheHttpClient` padrão sem criá-lo explicitamente com os métodos `httpClient()` ou `httpClientBuilder()`

A exceção indicará que várias implementações HTTP foram encontradas no caminho de classe.

O exemplo de trecho de código a seguir leva a uma exceção.

```
// The dynamoDbClient uses the UrlConnectionHttpClient
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
        .httpClient(UrlConnectionHttpClient.create())
        .build();

// The s3Client below uses the ApacheHttpClient at runtime, without specifying it.
// An SdkClientException is thrown with the message that multiple HTTP implementations were found on the classpath.
S3Client s3Client = S3Client.create();

// Perform work with the s3Client and dynamoDbClient.

dynamoDbClient.close();
s3Client.close();
```

Evite a exceção configurando explicitamente o `S3Client` com um `ApacheHttpClient`.

```
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
        .httpClient(UrlConnectionHttpClient.create())
        .build();

S3Client s3Client = S3Client.builder()
        .httpClient(ApacheHttpClient.create())    // Explicitly build the ApacheHttpClient.
        .build();

// Perform work with the s3Client and dynamoDbClient.

dynamoDbClient.close();
s3Client.close();
```

**nota**  
Para criar explicitamente o `ApacheHttpClient`, você deve [adicionar uma dependência](http-configuration-apache.md#http-apache-dependency) do artefato `apache-client` em seu arquivo de projeto do Maven.

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

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

```
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.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 = UrlConnectionHttpClient.builder()
                .proxyConfiguration(ProxyConfiguration.builder()
                        .useSystemPropertyValues(Boolean.FALSE)
                        .build())
                .build();

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

**nota**  
Atualmente, o cliente HTTP URLConnection baseado não oferece suporte às propriedades do sistema proxy HTTPS ou à variável de ambiente HTTPS\$1PROXY.