Highlights
Теперь вы можете составлять, отправлять и повторять requests с вашим собственным API-ключом прямо в панели управления. Новый playground поддерживает все три продукта и сохраняет cookies, пресеты и историю между запусками. Вместе с этим вышли два исправления стабильности: работа unblocker: true незаметно ухудшалась в течение нескольких недель (теперь он снова работает сквозным образом), а Browser теперь надежно перехватывает cookie cf_clearance от пассивной проверки Cloudflare.
What's New
The Dashboard Playground
/dashboard/#playground теперь представляет собой полноценный рабочий инструмент. Три вкладки продуктов (Single, Proxy Finder, Browser), строка URL, headers, body, а также все флаги для каждого продукта, соответствующие их реальной схеме. Отправьте request и наблюдайте за рендерингом response в режимах просмотра JSON, HTML и текста. Ищите по панелям response с помощью Ctrl/Cmd+K. Разверните response на весь экран, когда нужно прочитать огромный массив HTML.
Несколько деталей, которые появились благодаря тому, что мы создавали этот инструмент так, как хотели бы использовать его сами:
- Полученные cookies сохраняются в jar для каждого хоста. Следующий request к тому же хосту прикрепляет их автоматически, при этом вы можете просмотреть, отредактировать или удалить любой cookie перед отправкой.
- Панель рабочих proxy собирает каждый proxy id, полученный в результате успешного запуска Proxy Finder, поэтому вы можете нажать «use» и повторно использовать этот proxy в request для Single или Browser без повторного ввода.
- Сохраняйте requests как пресеты. Повторяйте любой из последних 20 запусков из диалогового окна истории.
- Генератор команд curl показывает точную команду (с
x-api-key), которую вы запустили бы в терминале для отправки аналогичного request.
Playground подписывает короткоживущий внутренний token, поэтому ваш открытый ключ никогда не покидает панель управления. Лимиты, метрики и last_used_at учитываются для выбранного вами ключа точно так же, как если бы вы отправили request из собственного кода.
unblocker: true works again, end-to-end
Мы обнаружили проблему сборки, из-за которой в течение последних нескольких недель незаметно ухудшалась обработка requests в Single и Proxy Finder с параметром unblocker: true. Сборка была выпущена без фактически подключенного обхода, поэтому requests, которые должны были проходить защиту от ботов на уровне TLS-handshake, вместо этого получали стандартную сигнатуру request. Сайты, которые должны были пропускать нас, блокировали нас.
Исправление развернуто. Мы провели сквозную проверку на одиннадцати реальных целях, включая три сайта с промежуточными страницами Cloudflare, для обхода которых ранее требовался Browser. Теперь Single справляется с ними самостоятельно. Цепочка вызовов Proxy Finder + Browser + Single (найти proxy, получить cookie cf_clearance из Browser, отправить request к странице через Single с этим cookie и тем же proxy) возвращает полный HTML за один круг.
Это наша вина. unblocker: true работал в день релиза и незаметно сломался во время плановой пересборки. Если в последние несколько недель вы отправляли request с параметром unblocker: true к защищенному сайту и получали ошибку 403 вместо ожидаемого кода 200, причина была именно в этом. Попробуйте еще раз.
Browser handles Cloudflare's passive JavaScript challenge
У Cloudflare есть два режима проверки. Активный режим (HTTP 403 и промежуточная страница) мы уже обрабатывали. Пассивный режим работает хитрее: страница сразу возвращает 200, но Cloudflare внедряет асинхронный JavaScript-зонд, который собирает отпечаток клиента и только после этого выдает cookie cf_clearance. До этого исправления Browser завершал обработку response до того, как зонд успевал завершить работу, поэтому cookie clearance так и не попадал в jar.
Теперь Browser явно отслеживает событие Set-Cookie и ожидает cf_clearance, если обнаруживает маркер пассивной проверки в body. Никакого опроса, никаких фиксированных периодов ожидания и никаких дополнительных задержек для сайтов без Cloudflare. Двенадцать реальных доменов в тестовом наборе, три из которых используют пассивную проверку, теперь стабильно возвращают clearance cookies.
Closed an SSRF gap at the API edge
Действующий API-ключ pk_live_... не дает права на доступ к нашей частной сети. Теперь API отклоняет любую цель, чей литерал имени хоста или результат разрешения DNS попадает в зарезервированные блоки RFC 5735, 6598 или IPv6. Эта же проверка выполняется на уровне каждого бэкенд-продукта в качестве второй линии защиты.
Внешне никаких изменений заметно не будет. Мы блокируем целый класс попыток сканирования внутренней сети еще до завершения TCP-handshake.
Blog gets unique social previews, pagination fixed
Теперь для каждого поста в блоге генерируется собственное изображение Open Graph с заголовком и кратким описанием статьи на фирменной карточке. Вставьте ссылку foura.ai/blog/... в Discord, LinkedIn, Slack или Twitter, и вы увидите превью конкретного поста вместо стандартной заглушки.
Пагинация на главной странице блога работала некорректно. Кнопка «Older» возвращала пользователя на страницу 1. Мы перестроили ее на основе путей в URLs (/blog/page/N/), добавили нумерацию страниц с динамическим окном отображения и внедрили корректные теги ссылок rel=prev/next для пагинированных серий. Старые URLs вида ?page=N перенаправляются на новый формат с помощью 301-редиректа, поэтому проиндексированные ранее страницы не будут потеряны.
Under the Hood
Наш MCP-сервер запущен по адресу mcp.foura.ai для любых инструментов на базе LLM, поддерживающих Model Context Protocol. Для аутентификации используется тот же Bearer token pk_live_..., что и для работы с REST API. Он предоставляет три продукта в качестве инструментов (Single, Proxy Finder, Browser) и несколько готовых prompts. Если вы интегрируете FourA в Claude Code или любой другой агент с поддержкой MCP, вам больше не нужно запускать локальный мост.
Если вы откладывали использование панели управления, так как предыдущая версия playground была лишь наброском, откройте ее на этой неделе. Теперь мы сами используем этот интерфейс, когда что-то идет не так при работе с целевым API.