Стандартный 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-запроса.

Похожие статьи