суббота, 1 февраля 2020 г.

Тип Client пакета net/http в Golang

Client - это клиент HTTP. Его нулевое значение (DefaultClient) является используемым клиентом, который использует DefaultTransport.

Transport клиента обычно имеет внутреннее состояние (кэшированные TCP-соединения), поэтому клиенты должны использоваться повторно, а не создаваться по мере необходимости. Клиенты безопасны для одновременного использования несколькими go-процедурами (goroutines).

Client более высокого уровня, чем RoundTripper (например, Transport), дополнительно обрабатывает детали HTTP, такие как cookie-файлы и перенаправления.

При следующих перенаправлениях Client будет пересылать все заголовки, установленные в начальном Request, кроме:

  • при пересылке конфиденциальных заголовков, таких как "Authorization", "WWW-Authenticate" и "Cookie", ненадежным целям. Эти заголовки будут игнорироваться при перенаправлении на домен, который не совпадает с поддоменом или не совпадает с исходным доменом. Например, перенаправление с "foo.com" на "foo.com" или "sub.foo.com" будет перенаправлять конфиденциальные заголовки, а перенаправление на "bar.com" - нет.
  • при пересылке заголовка "Cookie" с не-nil cookie Jar. Поскольку каждое перенаправление может изменить состояние cookie jar, перенаправление может изменить набор cookie jar в начальном запросе. При пересылке заголовка "Cookie" любые мутированные cookies будут опущены, при этом ожидается, что Jar вставит эти мутированные cookies с обновленными значениями (при условии, что происхождение совпадает). Если Jar равен nil, исходные файлы cookie отправляются без изменений.

type Client struct {
    // Transport определяет механизм, с помощью которого
    // индивидуальные HTTP-запросы сделаны.
    // Если nil, используется DefaultTransport.
    Transport RoundTripper

    // CheckRedirect указывает политику для обработки 
    // перенаправлений.
    // Если CheckRedirect не равен nil, клиент вызывает 
    // его раньше после перенаправления HTTP. 
    // Аргументы req и via являются предстоящим запросом
    // и уже сделанными запросами, самый старый первый.
    // Если CheckRedirect возвращает ошибку, 
    // клиент получает метод возвращающий оба предыдущих 
    // ответа (со своим Body закрытым) 
    // и ошибку CheckRedirect (обернута в url.Error)
    // вместо выдачи Request req
    // Как частный случай, 
    // если CheckRedirect возвращает ErrUseLastResponse,
    // тогда самый последний ответ возвращается с его Body
    // незакрытым, вместе с ошибкой nil.
    //
    // Если CheckRedirect равен nil, 
    // Client использует свою политику по умолчанию,
    // который должен остановиться 
    // после 10 последовательных запросов.
    CheckRedirect func(req *Request, via []*Request) error

    // Jar определяет cookie jar.
    //
    // Jar используется для вставки 
    // соответствующих cookie в каждый
    // исходящий Request и обновляется значениями cookie
    // каждого входящего ответа. 
    // Jar консультируют для каждого
    // перенаправления, которому клиент следует.
    //
    // Если Jar nil, cookies отправляются 
    // только если они явно
    // устанавливается по запросу.
    Jar CookieJar

    // Timeout указывает ограничение по времени 
    // для запросов, сделанных этим Client. 
    // Тайм-аут включает время подключения, любое
    // перенаправление и чтение тела ответа. 
    // Таймер остается выполняемым 
    // после возврата Get, Head, Post или Do
    // и будет прерывать чтение Response.Body.
    //
    // Timeout нулевой означает отсутствие тайм-аута.
    //
    // Client отменяет запросы к подлежащему Transport
    // как если бы Context запроса завершился.
    //
    // Для совместимости Client 
    // также будет использовать устаревший
    // метод CancelRequest на Transport, если найден. 
    // Новые реализации RoundTripper 
    // должны использовать Context запроса
    // для отмены вместо реализации CancelRequest.
    Timeout time.Duration // Go 1.3
}


Читайте также:


Комментариев нет:

Отправить комментарий