Il DefaultTransport standard di Go imposta Proxy su ProxyFromEnvironment. Un &http.Transport{} costruito separatamente ha una funzione Proxy nil, che non seleziona alcun proxy.

Questa differenza può comparire dopo aver aggiunto un transport solo per cambiare un timeout. Con il valore predefinito standard ancora installato, clonatelo e modificate il campo necessario:

transport := http.DefaultTransport.(*http.Transport).Clone()
transport.ResponseHeaderTimeout = 15 * time.Second

client := &http.Client{
    Transport: transport,
    Timeout: 30 * time.Second,
}

Il clone conserva la selezione del proxy dall'ambiente e le altre impostazioni predefinite del transport. L'asserzione di tipo presuppone che l'applicazione non abbia sostituito DefaultTransport con un altro RoundTripper.

Per un transport costruito intenzionalmente da zero, impostate Proxy: http.ProxyFromEnvironment esplicitamente quando è la sua politica di instradamento. Una funzione ProxyURL esplicita esprime una politica diversa: un intermediario selezionato.

Configurate il transport prima che le richieste concorrenti lo usino, poi riutilizzatelo per il carico di lavoro. Modificare un oggetto predefinito condiviso può influire su client non correlati.

Le impostazioni TLS personalizzate sono separate. Disattivare la verifica dei certificati non è necessario per conservare l'individuazione del proxy e cambierebbe la sicurezza di ogni richiesta HTTPS corrispondente.

Articoli correlati