К содержимому

Документация

JavaScript SDK: HttpClient: запросы к сайту

Получите клиент через ctx.http(). Запросы проходят через настройки сайта, прокси, ограничения и журнал. Методы отправки запросов асинхронны.

Примеры — отдельные фрагменты тела async function run(ctx). Используйте await только для методов с Promise в сигнатуре.

Методы

withHeaders

ctx.http().withHeaders(headers) → HttpClient

Получить копию клиента с дополнительными HTTP-заголовками. Исходный клиент не меняется.

const result = ctx.http().withHeaders({ Accept: 'application/json' });

withoutCache

ctx.http().withoutCache() → HttpClient

Получить копию клиента, которая запрашивает свежие ответы без чтения кэша.

const result = ctx.http().withoutCache();

get

ctx.http().get(url, autoCaptcha=true) → Promise<Response>

Загрузить страницу или JSON по URL методом GET.

const result = await ctx.http().get(ctx.param('catalog_url', 'https://example.com/catalog'));

post

ctx.http().post(url, body, autoCaptcha=true) → Promise<Response>

Отправить POST с телом. Для точного JSON явно сериализуйте тело и укажите Content-Type.

const result = await ctx.http().post(ctx.param('catalog_url', 'https://example.com/catalog'));

request

ctx.http().request(method, url, body, autoCaptcha=true) → Promise<Response>

Отправить запрос с явно указанным HTTP-методом. Обычно достаточно get или post.

const result = await ctx.http().request('GET', ctx.param('catalog_url', 'https://example.com/catalog'));

pool

ctx.http().pool(urls, autoCaptcha=true) → Promise<Array<Response>>

Загрузить небольшую пачку независимых URL параллельно.

const result = await ctx.http().pool(['https://example.com/a', 'https://example.com/b']);

Параллелизм и размер ответа. В обычном профиле передайте от 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, from, to, autoCaptcha=true) → AsyncIterable<[number, Response]>

Последовательно пройти известный диапазон страниц. В шаблоне номер обозначается {page}.

for await (const [number, response] of ctx.http().pages('https://example.com/catalog?page={page}', 1, 3)) {
  ctx.log(`Страница ${number}: HTTP ${response.status}`);
}

tryJson

ctx.http().tryJson(urls, autoCaptcha=true) → Promise<unknown | null>

Попробовать несколько адресов JSON по очереди и взять первый подходящий ответ.

const result = await ctx.http().tryJson(['https://example.com/a', 'https://example.com/b']);

Автоматическое прохождение CAPTCHA

Параметр autoCaptcha необязательный, по умолчанию true. Передайте false, чтобы отключить автоматическое прохождение. При отключённом автоматическом режиме платные задания автоматически не запускаются. Общие настройки, поддерживаемые типы проверок и квоты продолжают действовать. Параметр есть у get, post, request, pool, pages и tryJson.

const response = await ctx.http().get(url, false);

CAPTCHA на своём агенте

Автоматический режим и отключение работают на агенте. Нужны браузер, связь с Akmelo и тариф с доступными агентами. Дополнительные ключи CAPTCHA настраивать не требуется. Проверки и стоимость относятся к пространству агента; локальное выполнение не делает их бесплатными.

Полный справочник CAPTCHA

SDK и REST API для CAPTCHA описывает все hints, значения по умолчанию, явный вызов, отключение, проверку результата, агенты, пределы и ошибки. Руководство пользователя и актуальные цены помогут настроить функцию и оплату.

Для выбора объектов используется kind: "yandex_image"; обычно тип определяется автоматически. image_selector указывает только картинку задания, instructions_selector порядок выбора, success_selector новый результат успешной операции. Список доменов целевых сайтов не нужен. Неизвестный вариант завершается ошибкой. Не запускайте бесконечные повторы при отказе.