

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

È possibile utilizzare gli intercettori per agganciarsi all'esecuzione di richieste e risposte API. Gli intercettori sono meccanismi aperti in cui l'SDK richiama il codice scritto dall'utente per inserire il comportamento nel ciclo di vita. request/response In questo modo, puoi modificare una richiesta in corso, eseguire il debug dell'elaborazione delle richieste, visualizzare le eccezioni e altro ancora. 

L'esempio seguente mostra un semplice intercettore che aggiunge un'intestazione aggiuntiva a tutte le richieste in uscita prima che venga inserito il ciclo di ripetizione.

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

[Per ulteriori informazioni e per conoscere gli hook di intercettazione disponibili, vedete l'interfaccia Interceptor.](https://docs.aws.amazon.com/smithy-kotlin/api/latest/smithy-client/aws.smithy.kotlin.runtime.client/-interceptor/index.html)

## Registrazione Interceptor
<a name="interceptor-registration"></a>

Gli intercettori vengono registrati quando si costruisce un client di servizio o quando si sostituisce la configurazione per un insieme specifico di operazioni.

### Interceptor per tutte le operazioni dei client di servizio
<a name="interceptor-all-ops"></a>

Il codice seguente aggiunge un'`AddHeader`istanza alla proprietà interceptors del builder. Questa aggiunta aggiunge l'`x-foo-version`intestazione a tutte le operazioni prima che venga inserito il ciclo di riprova.

```
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 per operazioni specifiche
<a name="interceptor-specific-ops"></a>

Utilizzando l'`withConfig`estensione, è possibile [sovrascrivere la configurazione del client di servizio](override-client-config.md) per una o più operazioni per qualsiasi client di servizio. Con questa funzionalità, è possibile registrare intercettori aggiuntivi per un sottoinsieme di operazioni. 

L'esempio seguente sostituisce la configurazione dell'`s3`istanza per le operazioni all'interno dell'estensione. `use` Le operazioni richiamate `s3Scoped` contengono sia le intestazioni che `x-foo-version` le `x-bar-version` intestazioni.

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