Все статьи

Управление редиректами и режим Raw Buffer

API FourA теперь поддерживает настраиваемые лимиты редиректов и сырые бинарные ответы. Две опции, которые меняют подход к обработке сложных сценариев веб-скрейпинга.

Цепочки редиректов ломают скрейперы. Бинарные ответы повреждаются при декодировании в текст. Две проблемы, которые постоянно возникают, как только вы выходите за рамки этапа «скачать страницу, распарсить HTML».

Мы добавили две новые опции запроса для решения обеих проблем: followRedirects и returnBuffer. Они уже доступны в API.

Как это работает

Управление редиректами с помощью followRedirects

Большинство API для скрейпинга обрабатывают редиректы как логическое значение: следовать им или нет. Это работает до тех пор, пока вы не столкнетесь с зацикленной цепочкой редиректов или пока вам не понадобится сам промежуточный ответ 302 для извлечения параметра отслеживания.

Параметр followRedirects в FourA принимает целое число от 0 до 20. Если его опустить (или установить в 0), вы получите обратно исходный ответ редиректа, включая заголовки. Установите значение 5, и запрос выполнит до пяти переходов, прежде чем вернуть конечный результат.

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/short-link",
    "followRedirects": 3,
    "unblocker": true
  }'

Это позволяет выполнить до трех редиректов. Если цепочка завершится за два шага, вы получите финальную страницу. Если она длиннее трех, вы получите результат второго перехода.

Разница важнее, чем кажется. Сайты электронной коммерции перенаправляют пользователя через URL отслеживания перед тем, как открыть страницу товара. Такие редиректы нужно проходить. Но партнерские сети и сокращатели URL иногда создают цепочки глубиной в шесть, семь или восемь переходов. А некоторые циклы редиректов вообще никогда не завершаются. Ограничение конкретным числом позволяет собирать данные, не зависая в бесконечном цикле, который тратит время ожидания запроса.

Раньше обходным решением была отправка запроса с отключенными редиректами, ручной парсинг Location header и отправка еще одного запроса. Это как минимум два вызова API, удвоенная задержка и код, который нужно поддерживать. Теперь это один вызов с указанием числа.

Сырые бинарные ответы с returnBuffer

Когда вы собираете изображения, файлы PDF или полезную нагрузку protobuf, декодирование текста разрушает данные. Библиотека HTTP предполагает, что ответ является текстом, применяет определение кодировки и незаметно искажает каждый байт, который в нее не вписывается. Protobuf становится нечитаемым. Заголовки изображений ломаются. В итоге вы получаете поврежденные файлы без понятного сообщения об ошибке, объясняющего причину.

returnBuffer указывает API полностью пропустить декодирование текста.

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product-image.jpg",
    "returnBuffer": true
  }'

Тело ответа возвращается в виде сырых байтов (в формате base64 в ответах JSON). Декодируйте его на своей стороне, и вы получите именно то, что отправил сервер. Никаких предположений о кодировке, никаких преобразований и незаметных повреждений данных.

Это было одно из самых частых обращений в поддержку: пользователи собирали изображения товаров или каталоги PDF и получали файлы, которые не открывались. Решение всегда было одинаковым, но теперь для этого есть флаг вместо обходного пути.

Эффект

Обе функции сокращают количество вызовов API на одну задачу. followRedirects устраняет циклы ручного отслеживания редиректов. returnBuffer избавляет от цикла «скачать, обнаружить повреждение, скачать заново с другими настройками».

Для целей с большим количеством редиректов (партнерские ссылки, сокращатели URL, цепочки отслеживания электронной коммерции) мы заметили снижение количества запросов на 40-60% на ранних этапах тестирования, когда пользователи переходили с ручной обработки редиректов на followRedirects. А для задач по сбору бинарных данных (изображения товаров, загрузка документов) returnBuffer превращает многоэтапный обходной путь в одну опцию (по предварительным результатам).

Это не броские функции. О таких вещах не думаешь, пока твой скрейпер не сломается в три часа ночи из-за того, что сайт добавил лишний шаг редиректа в процесс оформления заказа.

Для продвинутых пользователей

Объедините followRedirects с валидацией ответов для точного контроля над цепочками редиректов. Следуйте редиректам, но прерывайте запрос ошибкой, если конечный пункт назначения недоступен:

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product/12345",
    "followRedirects": 5,
    "unblocker": true,
    "validate": {
      "status": { "fail": [403, 503] },
      "data": { "fail": ["Access Denied", "captcha"] }
    }
  }'

Это выполняет до пяти редиректов, а затем проверяет финальный ответ. Если сайт перенаправил вас на страницу CAPTCHA или выдал ошибку доступа, запрос корректно завершается с ошибкой. Никакого мусора в данных, который пришлось бы фильтровать на следующих этапах.

Для сбора бинарных данных используйте returnBuffer совместно с запросами HEAD, когда нужно проверить тип контента перед загрузкой больших файлов. FourA корректно обрабатывает HEAD (предотвращая внутренние ошибки libcurl), поэтому вы можете проверять заголовки без скачивания тела ответа. Проверьте Content-Type, решите, стоит ли скачивать файл, а затем сделайте полный запрос с параметром returnBuffer: true.

И если вы используете задачи браузера для целей с большим количеством JavaScript, обратите внимание, что эти опции применяются к прямому движку HTTP. Запросы браузера обрабатывают редиректы через встроенную навигацию Chrome, которая следует по ним по умолчанию без ограничений.

Что дальше

Мы работаем над предоставлением большего количества настроек на уровне запросов через API: кастомное разрешение DNS, пофазная настройка тайм-аутов и параметры обработки сертификатов. Цель заключается в предоставлении всех возможностей curl-impersonate через чистый интерфейс REST без затрат на инфраструктуру.

Если вам нужна какая-то конкретная опция, мы готовы ее обсудить. В панели управления уже отображается эффективность ваших запросов с этими новыми опциями, так что вы можете сами оценить разницу.