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

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

PHP SDK: HTTP: запросы к сайту

Получите клиент через $ctx->http(). URL берите из настроек или проверенных ссылок источника. В примерах catalog_url и api_url являются параметрами запуска. Сеть, кэш, RPS и отмена контролируются платформой.

Общий справочник SDK

Методы

withHeaders

withHeaders(array $headers): self

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

$http = $ctx->http()->withHeaders(['Accept' => 'application/json']);
$response = $http->get($ctx->param('api_url'));

Результат и особенности. Возвращает HttpClient. Сохраните результат или продолжите цепочку; вызов без присваивания не изменит исходный клиент.

withoutCache

withoutCache(): self

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

$response = $ctx->http()->withoutCache()->get($ctx->param('catalog_url'));

Результат и особенности. Возвращает HttpClient. Ограничение частоты, права и сетевые ограничения сохраняются.

get

get(string $url, bool $autoCaptcha = true): Response

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

$response = $ctx->http()->get($ctx->param('catalog_url'));
if (!$response->ok()) { $ctx->abort('HTTP ' . $response->status); }

Результат и особенности. Возвращает Response. HTTP 200 ещё не гарантирует наличие каталога: проверьте ожидаемые элементы или поля.

post

post(string $url, array|string|null $body = null, bool $autoCaptcha = true): Response

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

$body = json_encode(['page' => 1]);
$response = $ctx->http()->withHeaders(['Content-Type' => 'application/json'])->post($ctx->param('api_url'), $body);

Результат и особенности. Возвращает Response. Тело допускает строку, массив или null; кодирование массива зависит от транспорта, поэтому для JSON используйте строку.

request

request(string $method, string $url, array|string|null $body = null, bool $autoCaptcha = true): Response

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

$response = $ctx->http()->request('GET', $ctx->param('catalog_url'));

Результат и особенности. Возвращает Response. method, url и необязательное body передаются транспортному слою; метод не даёт обходить ограничения сайта.

pool

pool(array $urls, bool $autoCaptcha = true): array

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

$responses = $ctx->http()->pool($ctx->param('product_urls', []));
foreach ($responses as $response) {
    $ctx->log('HTTP-ответ', ['status' => $response->status]);
}

Параллелизм и размер ответа. В обычном профиле передайте от 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

pages(string $template, int $from, int $to, bool $autoCaptcha = true): iterable

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

foreach ($ctx->http()->pages('https://shop.example.invalid/catalog?page={page}', 1, 3) as $number => $response) {
    $ctx->log('Получена страница', ['page' => $number]);
}

Результат и особенности. Возвращает перебираемую последовательность номер → Response. Последнюю страницу определяйте по источнику, иначе можно пропустить товары. from и to включены.

tryJson

tryJson(array $urls, bool $autoCaptcha = true): ?array

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

$data = $ctx->http()->tryJson($ctx->param('api_candidates', []));
if ($data === null) { $ctx->abort('JSON-источник не найден'); }

Результат и особенности. Возвращает массив или null. Пропускает неуспешные HTTP-ответы и ошибочный JSON; сетевые исключения автоматически не подавляет. Проверяйте структуру найденного массива.

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

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

$response = $ctx->http()->get($url, autoCaptcha: false);

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

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

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

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

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