РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1062 of 1593 menu

Тип http.Transport

Тип http.Transport реализует интерфейс http.RoundTripper и управляет выполнением HTTP-запросов. Он настраивает пул соединений, таймауты, прокси-серверы, параметры TLS и другие низкоуровневые детали. По умолчанию http.Transport используется в http.DefaultClient, но его можно заменить на кастомизированный экземпляр для более гибкой настройки.

Создание и настройка

package main import ( "net/http" "time" ) func main() { tr := &http.Transport{ MaxIdleConns: 100, MaxIdleConnsPerHost: 10, IdleConnTimeout: 90 * time.Second, DisableCompression: false, } client := &http.Client{ Transport: tr, Timeout: 10 * time.Second, } }

В примере создается кастомный транспорт с настройками пула соединений и таймаутами, который затем используется в HTTP-клиенте.

Настройка таймаутов

http.Transport позволяет задавать различные таймауты для управления временем ожидания соединений, чтения и записи данных:

package main import ( "net" "net/http" "time" ) func main() { tr := &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, TLSHandshakeTimeout: 10 * time.Second, ResponseHeaderTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, } client := &http.Client{ Transport: tr, } }

Здесь настраиваются таймаут установки соединения, рукопожатия TLS, ожидания заголовков ответа и времени для ожидания ответа на заголовок Expect: 100-continue.

Настройка прокси

Транспорт поддерживает работу через прокси-серверы с помощью поля Proxy, в которое передается функция определения прокси для каждого запроса:

package main import ( "net/http" "net/url" ) func main() { proxyURL, _ := url.Parse("http://proxy.example.com:8080") tr := &http.Transport{ Proxy: http.ProxyURL(proxyURL), } client := &http.Client{ Transport: tr, } }

В этом примере все запросы, выполненные через клиент, будут направляться через прокси-сервер с адресом http://proxy.example.com:8080.

Настройка TLS

Для работы с HTTPS можно настроить параметры TLS, например, отключить проверку сертификатов (не рекомендуется для продакшена) или указать клиентские сертификаты:

package main import ( "crypto/tls" "net/http" ) func main() { tr := &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, } client := &http.Client{ Transport: tr, } }

Пример использования с запросом

Давайте выполним GET-запрос с использованием кастомного транспорта и выведем статус ответа:

package main import ( "fmt" "net/http" "time" ) func main() { tr := &http.Transport{ MaxIdleConns: 10, IdleConnTimeout: 30 * time.Second, DisableCompression: false, } client := &http.Client{ Transport: tr, Timeout: 5 * time.Second, } resp, err := client.Get("https://example.com") if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() fmt.Println("Status:", resp.Status) }

Результат выполнения кода:

"Status: 200 OK"

Смотрите также

  • тип http.Client,
    который использует транспорт для выполнения запросов
  • интерфейс http.RoundTripper,
    который реализует транспорт
  • переменную http.DefaultTransport,
    которая используется по умолчанию
  • тип http.Server,
    который настраивает серверную сторону HTTP
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить