PHP SDK: HTTP: запросы к сайту
Получите клиент через $ctx->http(). URL берите из настроек или проверенных ссылок источника. В примерах catalog_url и api_url являются параметрами запуска. Сеть, кэш, RPS и отмена контролируются платформой.
Методы
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 новый результат успешной операции. Список доменов целевых сайтов не нужен. Неизвестный вариант завершается ошибкой. Не запускайте бесконечные повторы при отказе.