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
}
Читайте также:
Комментариев нет:
Отправить комментарий