

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.

# Interceptores HTTP
<a name="interceptors"></a>

Puede usar interceptores para conectarse a la ejecución de las solicitudes y respuestas de API. Los interceptores son mecanismos abiertos en los que el SDK invoca el código que se escribe para introducir un comportamiento en el ciclo de vida. request/response De esta forma puede modificar una solicitud en tránsito, depurar el procesamiento de las solicitudes, ver las excepciones y mucho más. 

El siguiente ejemplo muestra un interceptor simple que agrega un encabezado adicional a todas las solicitudes salientes antes de entrar en el bucle de reintentos.

```
class AddHeader(
    private val key: String,
    private val value: String
) : HttpInterceptor {
    override suspend fun modifyBeforeRetryLoop(context: ProtocolRequestInterceptorContext<Any, HttpRequest>): HttpRequest {
        val httpReqBuilder = context.protocolRequest.toBuilder()
        httpReqBuilder.headers[key] = value
        return httpReqBuilder.build()
    }
}
```

[Para obtener más información y los ganchos de intercepción disponibles, consulte la interfaz Interceptor.](https://docs.aws.amazon.com/smithy-kotlin/api/latest/smithy-client/aws.smithy.kotlin.runtime.client/-interceptor/index.html)

## Registro de interceptores
<a name="interceptor-registration"></a>

Los interceptores se registran cuando se crea un cliente de servicio o cuando se anula la configuración de un conjunto específico de operaciones.

### Interceptor para todas las operaciones del cliente de servicio
<a name="interceptor-all-ops"></a>

El siguiente código añade una `AddHeader` instancia a la propiedad de interceptores del generador. Esta adición añade el `x-foo-version` encabezado a todas las operaciones antes de entrar en el bucle de reintento.

```
val s3 = S3Client.fromEnvironment {
    interceptors += AddHeader("x-foo-version", "1.0")
}

// All service operations invoked using 's3' will have the header appended.
s3.listBuckets { ... }
s3.listObjectsV2 { ... }
```

### Interceptor solo para operaciones específicas
<a name="interceptor-specific-ops"></a>

Al utilizar la `withConfig` extensión, puede [anular la configuración del cliente de servicio](override-client-config.md) para una o más operaciones de cualquier cliente de servicio. Con esta capacidad, puede registrar interceptores adicionales para un subconjunto de operaciones. 

El siguiente ejemplo anula la configuración de la `s3` instancia para las operaciones dentro de la extensión. `use` Las operaciones ejecutadas `s3Scoped` contienen tanto los encabezados como `x-foo-version` los `x-bar-version` encabezados.

```
// 's3' instance created in the previous code snippet.
s3.withConfig {
    interceptors += AddHeader("x-bar-version", "3.7")
}.use { s3Scoped ->
    // All service operations invoked using 's3Scoped' trigger interceptors
    // that were registered when the client was created and any added in the
    // withConfig { ... } extension.
}
```