

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configurar el cliente HTTP URLConnection basado
<a name="http-configuration-url"></a>

 AWS SDK for Java 2.x Ofrece un cliente `[UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html)` HTTP más ligero en comparación con el predeterminado. `ApacheHttpClient` El `UrlConnectionHttpClient` se basa en el `[URLConnection](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/URLConnection.html)` de Java.

El `UrlConnectionHttpClient` se carga más rápido que el cliente HTTP basado en Apache, pero tiene menos características. Como se carga más rápido, es una [buena solución](lambda-optimize-starttime.md) para las funciones AWS Lambda de Java.

El `UrlConnectionHttpClient` tiene varias [opciones configurables](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html) a las que puede acceder.

**nota**  
El `UrlConnectionHttpClient` no admite el método HTTP PATCH.   
Algunas operaciones de AWS API requieren solicitudes de PATCH. Los nombres de esas operaciones suelen empezar por `Update*`. A continuación se presentan varios ejemplos.  
[Varias `Update*` operaciones](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_Operations.html) en la AWS Security Hub CSPM API y también en la [BatchUpdateFindings](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_BatchUpdateFindings.html)operación
Todas las [operaciones de `Update*`](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html) de la API de Amazon API Gateway
Si puedes usar la`UrlConnectionHttpClient`, consulta primero la referencia de la API Servicio de AWS que estés usando. Compruebe si las operaciones que necesita utilizan la operación PATCH.

## Acceso al `UrlConnectionHttpClient`
<a name="http-url-dependency"></a>

Para configurar y utilizar el `UrlConnectionHttpClient`, debe declarar una dependencia en el artefacto Maven `pom.xml` de su archivo `url-connection-client`.

A diferencia del `ApacheHttpClient`, el `UrlConnectionHttpClient` se añade automáticamente al proyecto, por lo que el usuario debe declararlo específicamente.

El siguiente ejemplo de un archivo `pom.xml` muestra las dependencias necesarias para usar y configurar el 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>
```

## Utilizar y configurar el `UrlConnectionHttpClient`
<a name="http-url-config"></a>

Puede configurar una instancia del `UrlConnectionHttpClient` junto con la creación de un cliente de servicio, o configurar una sola instancia para compartirla entre varios clientes de servicio. 

Con cualquiera de los dos enfoques, se utiliza el [UrlConnectionHttpClient.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html) para configurar las propiedades del cliente HTTP URLConnection basado.

### Práctica recomendada: dedicar una instancia de `UrlConnectionHttpClient` a un cliente de servicio
<a name="http-config-url-one-client"></a>

Si necesita configurar una instancia del `UrlConnectionHttpClient`, le recomendamos que cree la instancia `UrlConnectionHttpClient` dedicada. Puede hacerlo con el método `httpClientBuilder` del generador del cliente del servicio. De esta forma, el SDK administra el ciclo de vida del cliente HTTP, lo que ayuda a evitar posibles pérdidas de memoria si la instancia `UrlConnectionHttpClient` no se cierra cuando ya no se necesita.

En el ejemplo siguiente, se crea un `S3Client` y se configura la instancia integrada de `UrlConnectionHttpClient` con los valores `socketTimeout` y `proxyConfiguration`. El método `proxyConfiguration` toma una expresión lambda de Java de tipo ` Consumer<[ProxyConfiguration.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/ProxyConfiguration.Builder.html)>`.

 **Importaciones** 

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

### Enfoque alternativo: compartir una instancia `UrlConnectionHttpClient`
<a name="http-config-url-multi-clients"></a>

Para reducir el uso de recursos y memoria en su aplicación, puede configurar un `UrlConnectionHttpClient` y compartirlo entre varios clientes de servicio. El grupo de conexiones HTTP se compartirá, lo que reduce el uso de recursos.

**nota**  
Al compartir una instancia de `UrlConnectionHttpClient`, es preciso cerrarla cuando esté lista para ser eliminada. El SDK no cerrará la instancia cuando el cliente del servicio esté cerrado.

El siguiente ejemplo configura un cliente HTTP URLConnection basado que utilizan dos clientes de servicio. La instancia de `UrlConnectionHttpClient` configurada se pasa al método `httpClient` de cada creador. Cuando los clientes de servicio y el cliente HTTP ya no son necesarios, el código los cierra de forma explícita. El código cierra el cliente HTTP por última vez.

**Importaciones**

```
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();
```

#### Utiliza `URLConnectionHttpClient` y `ApacheHttpClient` juntos
<a name="http-config-url-caveat"></a>

Al utilizar el `UrlConnectionHttpClient` en su aplicación, debe proporcionar a cada cliente de servicio una instancia `URLConnectionHttpClient` o una instancia `ApacheHttpClient` mediante el método `httpClientBuilder` del creador de clientes de servicio. 

Se produce una excepción si el programa utiliza varios clientes de servicio y se cumplen las siguientes condiciones:
+ Un cliente de servicio está configurado para usar una instancia `UrlConnectionHttpClient`
+ Otro cliente de servicio utiliza el `ApacheHttpClient` predeterminado sin compilarlo explícitamente con los métodos `httpClient()` o `httpClientBuilder()`

La excepción indicará que se encontraron varias implementaciones HTTP en la ruta de clases.

El siguiente fragmento de código de ejemplo conduce a una excepción.

```
// 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 la excepción configurando explícitamente el `S3Client` con un `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 crear explícitamente el `ApacheHttpClient`, debe [añadir una dependencia](http-configuration-apache.md#http-apache-dependency) del artefacto `apache-client` en su archivo de proyecto Maven.

## Ejemplo de configuración proxy
<a name="http-configuration-url-proxy-conf-ex"></a>

El siguiente fragmento de código utiliza el [generador de configuración proxy para el cliente HTTP de conexión 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();
```

Las propiedades del sistema Java equivalentes para la configuración del proxy se muestran en el siguiente fragmento de línea de comandos.

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

La configuración equivalente que usa variables de entorno es:

```
// 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**  
El cliente HTTP URLConnection basado no admite actualmente las propiedades del sistema proxy HTTPS ni la variable de entorno HTTPS\$1PROXY.