Python SDK: HttpClient: запросы к сайту
Получите клиент через ctx.http(). Запросы проходят через настройки сайта, прокси, ограничения и журнал. Методы отправки запросов синхронны.
Примеры являются фрагментами тела def run(ctx):. Все методы SDK синхронны, await не нужен.
Методы
with_headers
ctx.http().with_headers(headers) -> HttpClient
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
headers |
dict[str, str] |
Да | Словарь HTTP-заголовков. |
Результат: HttpClient. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить копию клиента с дополнительными HTTP-заголовками. Исходный клиент не меняется.
result = ctx.http().with_headers({'Accept': 'application/json'})
without_cache
ctx.http().without_cache() -> HttpClient
Аргументы не нужны.
Результат: HttpClient. Объект SDK: используйте его методы, не передавайте целиком в emit.
Получить копию клиента, которая запрашивает свежие ответы без чтения кэша.
result = ctx.http().without_cache()
get
ctx.http().get(url, auto_captcha=True) -> Response
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
url |
str |
Да | Разрешённый HTTP(S)-адрес источника. |
Результат: Response. Объект SDK: используйте его методы, не передавайте целиком в emit.
Загрузить страницу или JSON по URL методом GET.
result = ctx.http().get(ctx.param('catalog_url', 'https://example.com/catalog'))
post
ctx.http().post(url, body=None, auto_captcha=True) -> Response
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
url |
str |
Да | Разрешённый HTTP(S)-адрес источника. |
body |
str | dict | None |
Нет, default в сигнатуре | Тело HTTP-запроса; для JSON передайте сериализованную строку. |
Результат: Response. Объект SDK: используйте его методы, не передавайте целиком в emit.
Отправить POST с телом. Для точного JSON явно сериализуйте тело и укажите Content-Type.
import json
client = ctx.http().with_headers({'Content-Type': 'application/json'})
result = client.post(ctx.param('api_url'), json.dumps({'page': 1}))
request
ctx.http().request(method, url, body=None, auto_captcha=True) -> Response
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
method |
str |
Да | HTTP-метод, например GET или POST. |
url |
str |
Да | Разрешённый HTTP(S)-адрес источника. |
body |
str | dict | None |
Нет, default в сигнатуре | Тело HTTP-запроса; для JSON передайте сериализованную строку. |
Результат: Response. Объект SDK: используйте его методы, не передавайте целиком в emit.
Отправить запрос с явно указанным HTTP-методом. Обычно достаточно get или post.
result = ctx.http().request('GET', ctx.param('catalog_url'))
pool
ctx.http().pool(urls, auto_captcha=True) -> list[Response]
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
urls |
list[str] |
Да | Небольшой список разрешённых HTTP(S)-адресов. |
Результат: list[Response].
Загрузить небольшую пачку независимых URL параллельно.
result = ctx.http().pool([ctx.param('first_url'), ctx.param('second_url')])
Параллелизм и размер ответа. В обычном профиле передайте от 1 до 8 URL; одновременно работают максимум два запроса. На собственном агенте с включённым профилем «Высокая нагрузка» можно передать до 6000 URL. Одновременно выполняется не больше concurrency сайта и общей ёмкости сетевого компонента. Частота rps, короткий пик burst, robots.txt и остальные настройки продолжают действовать.
Список ответов возвращается в исходном порядке. Суммарный ответ SDK ограничен 8 000 000 байт вместе с метаданными. Для крупных HTML выбирайте небольшие пачки и обрабатывайте их по очереди. Сетевое исключение или превышение размера возвращает ошибку пула, усечённые тела не выдаются. HTTP-статус 404 или 500 сам по себе не является сетевым исключением: проверяйте status и response.ok() у каждого ответа. 6000 HTTP-запросов не означают 6000 браузеров или сценариев. Подробности: Высокая HTTP-нагрузка на агенте.
pages
ctx.http().pages(template, start, end, auto_captcha=True) -> Iterator[tuple[int, Response]]
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
template |
str |
Да | URL-шаблон с {page}. |
start |
int | str |
Да | Начальная граница: число страницы либо начало искомого фрагмента. |
end |
int | str |
Да | Конечная граница: включительный номер страницы либо конец фрагмента. |
Результат: Iterator[tuple[int, Response]].
Последовательно пройти известный диапазон страниц. В шаблоне номер обозначается {page}.
for number, response in ctx.http().pages(ctx.param('page_template'), 1, 3):
ctx.log('Page loaded', {'page': number, 'status': response.status})
try_json
ctx.http().try_json(urls, auto_captcha=True) -> Any | None
| Аргумент | Тип | Обязателен | Назначение |
|---|---|---|---|
urls |
list[str] |
Да | Небольшой список разрешённых HTTP(S)-адресов. |
Результат: Any | None.
Попробовать несколько адресов JSON по очереди и взять первый подходящий ответ.
result = ctx.http().try_json([ctx.param('first_url'), ctx.param('second_url')])
Ошибки и контекст выполнения
Все вызовы синхронны. Неверный аргумент или формат данных может вызвать ValueError/TypeError; отказ платформы или недоступность сервиса вызывает RuntimeError. Отсутствие элемента/значения даёт None либо пустой список только там, где это явно описано. Не превращайте любое исключение в пустой успешный результат. Методы внешних сервисов недоступны в преобразовании выгрузки; см. ограничения преобразований и среду.
Автоматическое прохождение CAPTCHA
Параметр auto_captcha необязательный, по умолчанию True. Передайте False, чтобы отключить автоматическое прохождение. При отключённом автоматическом режиме платные задания автоматически не запускаются. Общие настройки, поддерживаемые типы проверок и квоты продолжают действовать. Параметр есть у get, post, request, pool, pages и try_json.
response = ctx.http().get(url, auto_captcha=False)
CAPTCHA на своём агенте
Автоматический режим и отключение работают на агенте. Нужны браузер, связь с Akmelo и тариф с доступными агентами. Дополнительные ключи CAPTCHA настраивать не требуется. Проверки и стоимость относятся к пространству агента; локальное выполнение не делает их бесплатными.
Полный справочник CAPTCHA
SDK и REST API для CAPTCHA описывает все hints, значения по умолчанию, явный вызов, отключение, проверку результата, агенты, пределы и ошибки. Руководство пользователя и актуальные цены помогут настроить функцию и оплату.
Для выбора объектов используется kind: "yandex_image"; обычно тип определяется автоматически. image_selector указывает только картинку задания, instructions_selector порядок выбора, success_selector новый результат успешной операции. Список доменов целевых сайтов не нужен. Неизвестный вариант завершается ошибкой. Не запускайте бесконечные повторы при отказе.