

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.

# Personalización del cliente HTTP
<a name="configure-http"></a>

 AWS SDK para Go utiliza un cliente HTTP predeterminado con valores de configuración predeterminados. Si bien puede cambiar algunos de estos valores de configuración, el cliente y el transporte HTTP predeterminados no están suficientemente configurados para aquellos clientes que usan AWS SDK para Go en un entorno con requisitos de alto rendimiento y baja latencia. Para obtener más información, consulte la sección [Preguntas frecuentes](faq-gosdk.md), ya que las recomendaciones de configuración varían en función de las cargas de trabajo específicas. En esta sección se describe cómo configurar un cliente HTTP personalizado y cómo usarlo para crear llamadas a AWS SDK para Go. 

 Para ayudarle a crear un cliente HTTP personalizado, en esta sección se describe cómo usar [NewBuildableClient](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/transport/http#NewBuildableClient) a fin de configurar ajustes personalizados y cómo utilizar ese cliente con un cliente de servicio de AWS SDK para Go. 

 Vamos a definir qué queremos personalizar. 

## Reemplazo durante la carga de la configuración
<a name="overriding-during-configuration-loading"></a>

 Se pueden proporcionar clientes HTTP personalizados al llamar a [LoadDefaultConfig](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#LoadDefaultConfig) mediante la encapsulación del cliente con [WithHTTPClient](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#WithHTTP) y la transferencia del valor resultante a `LoadDefaultConfig`. Por ejemplo, para pasar `customClient` como nuestro cliente: 

```
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))
```

## Tiempo de espera
<a name="timeout"></a>

 El objeto `BuildableHTTPClient` se puede configurar con un límite de tiempo de espera para las solicitudes. En este tiempo de espera se incluye el tiempo necesario para conectarse, procesar cualquier redireccionamiento y leer el cuerpo de respuesta completo. Por ejemplo, para modificar el tiempo de espera del cliente: 

```
import "github.com/aws/aws-sdk-go-v2/aws/transport/http"

// ...

httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)
```

## Dialer
<a name="dialer"></a>

 El objeto `BuildableHTTPClient` proporciona una mecánica de creación para crear clientes con opciones [Dialer](https://golang.org/pkg/net/#Dialer) modificadas. En el ejemplo siguiente se muestra cómo establecer la configuración `Dialer` de un cliente: 

```
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
import "net"

// ...

httpClient := awshttp.NewBuildableClient().WithDialerOptions(func(d *net.Dialer) {
    d.KeepAlive = -1
    d.Timeout = time.Millisecond*500
})
```

### Configuración
<a name="settings"></a>

#### Dialer.KeepAlive
<a name="dialerkeepalive"></a>

 Esta configuración representa el período de conservación de una conexión de red activa. 

 Establézcala en un valor negativo para deshabilitar estos períodos. 

 Establézcala en **0** para habilitar los períodos de conservación si el protocolo y el sistema operativo los admiten. 

 Los protocolos de red o sistemas operativos que no admiten los períodos de conservación omiten este campo. De forma predeterminada, TCP habilita el período de conservación. 

 Consulte [https://golang.org/pkg/net/\$1Dialer.KeepAlive](https://golang.org/pkg/net/#Dialer.KeepAlive). 

 Establezca `KeepAlive` como **time.Duration**. 

#### Dialer.Timeout
<a name="dialertimeout"></a>

 Esta configuración representa el tiempo máximo de espera de marcado para la creación de una conexión. 

 El valor predeterminado es de 30 segundos. 

 Consulte [https://golang.org/pkg/net/\$1Dialer.Timeout](https://golang.org/pkg/net/#Dialer.Timeout) 

 Establezca `Timeout` como **time.Duration**. 

## Transporte
<a name="transport"></a>

 El objeto `BuildableHTTPClient` proporciona una mecánica de creación destinada a crear clientes con opciones [Transport](https://golang.org/pkg/net/http#Transport) modificadas. 

### Configuración de un proxy
<a name="configuring-a-proxy"></a>

 Si no puede conectarse directamente a Internet, puede utilizar variables de entorno compatibles con Go (`HTTP_PROXY`/`HTTPS_PROXY`) o crear un cliente HTTP personalizado para configurar el proxy. En el ejemplo siguiente se configura el cliente para usar `PROXY_URL` como punto de conexión del proxy: 

```
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
import "net/http"

// ...

httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) {
    proxyURL, err := url.Parse("PROXY_URL")
    if err != nil {
        log.Fatal(err)
    }
    tr.Proxy = http.ProxyURL(proxyURL)
})
```

### Otras configuraciones
<a name="other-settings"></a>

 A continuación, se muestran otras configuraciones de `Transport` que se pueden modificar para ajustar el cliente HTTP. En la documentación del tipo [Transport](https://golang.org/pkg/net/http/#Transport) encontrará configuraciones adicionales que no se describen aquí. Estas configuraciones se pueden aplicar como se muestra en el ejemplo siguiente: 

```
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
import "net/http"

// ...

httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) {
    tr.ExpectContinueTimeout = 0
    tr.MaxIdleConns = 10
})
```

#### Transport.ExpectContinueTimeout
<a name="transportexpectcontinuetimeout"></a>

 Si la solicitud tiene el encabezado “Expect: 100-continue”, esta configuración representa el tiempo máximo de espera para los primeros encabezados de respuesta de un servidor después de escribir por completo los encabezados de solicitud. En este tiempo no se incluye el tiempo necesario para enviar el encabezado de solicitud. El cliente HTTP envía su carga útil después de agotarse este tiempo de espera. 

 El valor predeterminado es de un segundo. 

 Establézcala en **0** para no definir ningún tiempo de espera y enviar la carga útil de la solicitud sin esperar. Un caso de uso se produce cuando tiene problemas con proxies o servicios de terceros que toman una sesión similar al uso de Amazon S3 en la función que se muestra más adelante. 

 Consulte [https://golang.org/pkg/net/http/\$1Transport.ExpectContinueTimeout](https://golang.org/pkg/net/http/#Transport.ExpectContinueTimeout). 

 Establezca `ExpectContinue` como **time.Duration**. 

#### Transport.IdleConnTimeout
<a name="transportidleconntimeout"></a>

 Esta configuración representa el tiempo máximo para mantener activa una conexión de red inactiva entre solicitudes HTTP. 

 Establézcala en **0** para que no haya límite. 

 Consulte [https://golang.org/pkg/net/http/\$1Transport.IdleConnTimeout](https://golang.org/pkg/net/http/#Transport.IdleConnTimeout). 

 Establezca `IdleConnTimeout` como **time.Duration**. 

#### Transport.MaxIdleConns
<a name="transportmaxidleconns"></a>

 Esta configuración representa el número máximo de conexiones inactivas (con mantenimiento activo) en todos los hosts. Un caso de uso para aumentar este valor es cuando se dan muchas conexiones de los mismos clientes en un período breve. 

 **0** significa que no hay límite. 

 Consulte [https://golang.org/pkg/net/http/\$1Transport.MaxIdleConns](https://golang.org/pkg/net/http/#Transport.MaxIdleConns). 

 Establezca `MaxIdleConns` como **int**. 

#### Transport.MaxIdleConnsPerHost
<a name="transportmaxidleconnsperhost"></a>

 Esta configuración representa el número máximo de conexiones inactivas (con mantenimiento activo) que se conservan por host. Un caso de uso para aumentar este valor es cuando se dan muchas conexiones de los mismos clientes en un período breve. 

 El valor predeterminado es de dos conexiones inactivas por host. 

 Establézcala en **0** para usar DefaultMaxIdleConnsPerHost (2). 

 Consulte [https://golang.org/pkg/net/http/\$1Transport.MaxIdleConnsPerHost](https://golang.org/pkg/net/http/#Transport.MaxIdleConnsPerHost). 

 Establezca `MaxIdleConnsPerHost` como **int**. 

#### Transport.ResponseHeaderTimeout
<a name="transportresponseheadertimeout"></a>

 Esta configuración representa el tiempo máximo de espera para que un cliente lea el encabezado de respuesta. 

 Si el cliente no puede leer el encabezado de la respuesta dentro de este período, se producirá un error de tiempo de espera de la solicitud. 

 Tenga cuidado al establecer este valor cuando utilice funciones de Lambda de ejecución prolongada, ya que la operación no devolverá ningún encabezado de respuesta hasta que la función de Lambda haya finalizado o se haya agotado su tiempo de espera. Sin embargo, puede seguir usando esta opción con la operación de la API \$1\$1 InvokeAsync\$1\$1. 

 El valor predeterminado es no establecer un tiempo de espera, es decir, una espera indefinida. 

 Consulte [https://golang.org/pkg/net/http/\$1Transport.ResponseHeaderTimeout](https://golang.org/pkg/net/http/#Transport.ResponseHeaderTimeout). 

 Establezca `ResponseHeaderTimeout` como **time.Duration**. 

#### Transport.TLSHandshakeTimeout
<a name="transporttlshandshaketimeout"></a>

 Esta configuración representa el tiempo máximo de espera para que se complete un establecimiento de comunicación TLS. 

 El valor predeterminado es de diez segundos. 

 Cero significa que no hay tiempo de espera. 

 Consulte [https://golang.org/pkg/net/http/\$1Transport.TLSHandshakeTimeout](https://golang.org/pkg/net/http/#Transport.TLSHandshakeTimeout). 

 Establezca `TLSHandshakeTimeout` como **time.Duration**. 