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

Переменная http.DefaultTransport

Переменная http.DefaultTransport содержит объект типа http.Transport, который используется по умолчанию для всех HTTP-запросов, выполняемых функциями пакета net/http (такими как http.Get, http.Post и другими). Эта переменная позволяет настраивать глобальные параметры сетевого взаимодействия, включая таймауты, прокси, максимальное количество соединений и другие важные параметры.

Синтаксис

var DefaultTransport RoundTripper = &Transport{ Proxy: ProxyFromEnvironment, DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, ForceAttemptHTTP2: true, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, }

Переменная экспортируется как интерфейс http.RoundTripper, но фактически содержит указатель на структуру http.Transport с предустановленными значениями.

Базовый пример с настройкой таймаута

В этом примере мы изменяем глобальные настройки транспорта, устанавливая таймаут соединения в 5 секунд:

package main import ( "fmt" "net" "net/http" "time" ) func main() { transport := http.DefaultTransport.(*http.Transport).Clone() transport.DialContext = (&net.Dialer{ Timeout: 5 * time.Second, KeepAlive: 30 * time.Second, }).DialContext http.DefaultTransport = transport client := &http.Client{ Transport: http.DefaultTransport, } resp, err := client.Get("https://example.com") if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() fmt.Println("Status code:", resp.StatusCode) }

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

"Status code: 200"

Настройка максимального количества соединений

Изменим параметры транспорта для ограничения максимального количества простаивающих соединений:

package main import ( "fmt" "net/http" ) func main() { transport := http.DefaultTransport.(*http.Transport).Clone() transport.MaxIdleConns = 50 transport.MaxIdleConnsPerHost = 10 http.DefaultTransport = transport client := &http.Client{ Transport: http.DefaultTransport, } resp, err := client.Get("https://example.com") if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() fmt.Println("Status code:", resp.StatusCode) }

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

"Status code: 200"

Настройка прокси-сервера

Изменим транспорт для использования прокси-сервера:

package main import ( "fmt" "net/http" "net/url" ) func main() { proxyURL, err := url.Parse("http://proxy.example.com:8080") if err != nil { fmt.Println("Parse error:", err) return } transport := http.DefaultTransport.(*http.Transport).Clone() transport.Proxy = http.ProxyURL(proxyURL) http.DefaultTransport = transport client := &http.Client{ Transport: http.DefaultTransport, } resp, err := client.Get("https://example.com") if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() fmt.Println("Status code:", resp.StatusCode) }

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

"Status code: 200"

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

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