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 новый результат успешной операции. Список доменов целевых сайтов не нужен. Неизвестный вариант завершается ошибкой. Не запускайте бесконечные повторы при отказе.