Общие HTTP-клиенты в Python
Обработчики Python могут отправлять HTTP-запросы через ctx.http_client и ctx.https_client. Companion создаёт эти экземпляры HttpClient с пулами соединений один раз на процесс и предоставляет их всем обслуживающим потокам и компьютейшенам. Методы жизненного цикла ресурсов получают те же клиенты через ResourceContext.
Используйте клиенты после настройки Python companion. Поддерживаемые примеры запросов находятся в локальных HTTP-тестах: они проверяют GET, POST, тела ответов, коды состояния, cookie и перенаправления.
API запросов
HttpClient.request(method, url, *, headers=None, params=None, data=None, json=None, timeout=None) возвращает HttpResponse. Методы get, post, put, patch, delete и head принимают URL и те же именованные аргументы.
|
Аргумент |
Назначение |
|
|
Заголовки запроса в виде словаря. |
|
|
Параметры строки запроса в виде словаря. |
|
|
Тело запроса, передаваемое клиенту Requests. |
|
|
Значение для сериализации в JSON-тело запроса. |
|
|
Число секунд или пара |
Передавайте параметры отдельного запроса при вызове. Не изменяйте состояние общего клиента из компьютейшена или ресурса.
Ответы и ошибки
HttpResponse предоставляет следующие поля и методы:
|
Поле или метод |
Результат |
|
|
Целочисленный HTTP-код состояния. |
|
|
Признак отсутствия HTTP-ошибки (4xx или 5xx). Ответ с перенаправлением тоже может иметь |
|
|
Конечный URL ответа после выполненных перенаправлений. |
|
|
Заголовки ответа в виде словаря. |
|
|
Тело ответа в виде |
|
|
Декодированное тело ответа. |
|
|
Тело ответа, декодированное как JSON; именованные аргументы передаются декодеру. |
HTTP-код ошибки не вызывает исключение: проверяйте status_code или ok. Ошибки выполнения запроса и декодирования JSON передаются вашему коду. Обёртка не добавляет цикл повторных запросов; явно выберите правила повторов и идемпотентности для внешнего сервиса.
Клиенты не сохраняют cookie из ответов и не отправляют их автоматически в следующих запросах. По умолчанию перенаправления отключены: ответ 3xx возвращается напрямую. Положительное значение max_redirect_count разрешает переходы в пределах заданного лимита; превышение лимита вызывает исключение клиента.
Конфигурация
Блок companion в конфигурации узла-воркера задаёт http_client_config и https_client_config. Воркер передаёт эти блоки процессу Python через YT_FLOW_COMPANION_CONFIG; из каждого блока Python создаёт отдельный клиент. Схема на стороне воркера описана в TCompanionConfig.
Python-обёртка читает из каждого блока следующие ключи:
|
Ключ |
Поведение Python |
|
|
Размер пула соединений. Если значение не задано или равно |
|
|
По умолчанию |
Остальные поля конфигурации HTTP/HTTPS-клиентов C++ эта Python-обёртка не применяет. В частности, таймаут Python-запроса задаётся аргументом timeout; поля таймаутов C++ его не заменяют. Размеры пулов не ограничивают число одновременно выполняемых запросов.
Доступность в тестах и встроенном коде
HttpClient, HttpClients и HttpResponse экспортируются из yt.yt.flow.library.python.companion. Можно создать HttpClient() с настройками по умолчанию или передать словарь поддерживаемых параметров.
Контекст выполнения, созданный вне обслуживающего кода companion, не получает клиенты автоматически. Чтение ctx.http_client или ctx.https_client без передачи клиентов вызывает ValueError. Тесты, которые создают контексты самостоятельно, должны передавать клиенты явно; см. тесты передачи клиентов в контекст.