Стандартний DefaultTransport у Go встановлює Proxy на ProxyFromEnvironment. Окремо створений &http.Transport{} має nil-функцію Proxy, тому не вибирає жодного проксі.

Ця різниця може проявитися після додавання транспорту лише для зміни тайм-ауту. Поки стандартне типове значення встановлено, клонуйте його й змініть потрібне поле:

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

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

Клон зберігає вибір проксі із середовища та інші типові налаштування транспорту. Перевірка типу припускає, що застосунок не замінив DefaultTransport іншим RoundTripper.

Для транспорту, навмисно створеного з нуля, задайте Proxy: http.ProxyFromEnvironment явно, якщо це його політика маршрутизації. Явна функція ProxyURL виражає іншу політику: один вибраний посередник.

Налаштуйте транспорт до того, як паралельні запити почнуть його використовувати, а потім повторно використовуйте його для навантаження. Зміна спільного типового об'єкта може вплинути на не пов'язаних клієнтів.

Власні налаштування TLS окремі. Вимикати перевірку сертифікатів не потрібно для збереження виявлення проксі, і це змінило б безпеку кожного відповідного HTTPS-запиту.

Схожі статті