

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

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

Você pode usar interceptores para se conectar à execução de solicitações e respostas de API. Os interceptores são mecanismos abertos nos quais o SDK chama o código que você grava para injetar comportamento no ciclo de vida. request/response Dessa maneira, é possível modificar uma solicitação em andamento, depurar o processamento da solicitação, visualizar exceções e muito mais. 

O exemplo a seguir mostra um interceptor simples que adiciona um cabeçalho adicional a todas as solicitações de saída antes que o loop de repetição seja inserido.

```
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 obter mais informações e os ganchos de interceptação disponíveis, consulte a interface do [Interceptor](https://docs.aws.amazon.com/smithy-kotlin/api/latest/smithy-client/aws.smithy.kotlin.runtime.client/-interceptor/index.html).

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

Você registra interceptores ao construir um cliente de serviço ou ao substituir a configuração de um conjunto específico de operações.

### Interceptor para todas as operações do cliente de serviço
<a name="interceptor-all-ops"></a>

O código a seguir adiciona uma `AddHeader` instância à propriedade interceptors do construtor. Essa adição adiciona o `x-foo-version` cabeçalho a todas as operações antes que o loop de repetição seja inserido.

```
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 somente para operações específicas
<a name="interceptor-specific-ops"></a>

Usando a `withConfig` extensão, você pode [substituir a configuração do cliente de serviço](override-client-config.md) para uma ou mais operações para qualquer cliente de serviço. Com esse recurso, você pode registrar interceptores adicionais para um subconjunto de operações. 

O exemplo a seguir substitui a configuração da `s3` instância para operações dentro da `use` extensão. As operações chamadas `s3Scoped` contêm os cabeçalhos `x-foo-version` e os `x-bar-version` cabeçalhos.

```
// '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.
}
```