Что нового
Ротацию выходных узлов автоматизируют все. Сигнатура браузера под ними обычно остается неизменной.
Single и Proxy Finder теперь принимают четыре необязательных поля, которые определяют, какой браузер эмулирует ваш request: browser, os, version и profile. Каталог доступен публично по адресу GET /api/profiles и не требует API key. Сейчас он содержит 79 профилей для Chrome, Edge, Safari, Firefox и Tor на Windows, macOS, Android и iOS.
Если вы не укажете профиль, Proxy Finder изменит его автоматически. Но только после того, как сайт дважды отклонит отправленный вами вариант.
Как это работает
Три поля предназначены для людей, одно для машин.
browser, os и version фильтруют каталог, и вы можете передавать любое их подмножество. os ищет по семейству, поэтому запрос macOS принимает все релизы macOS в списке, тогда как указание точной версии сужает выбор до нее. Если под условия подходят несколько профилей, выбирается самая свежая версия, поскольку актуальность критически важна. Устаревшие мажорные версии в первую очередь попадают в blocklist.
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"url": "https://example.com/listing/42",
"browser": "Safari",
"os": "iOS"
}'
Это преобразуется в самый свежий Safari на iOS в каталоге и отправляет соответствующий User-Agent, client hints и порядок заголовков именно в такой последовательности. Порядок заголовков сам по себе служит сигналом, поэтому ничего не сортируется при отправке.
profile это четвертое поле: точный id из каталога для кода, который должен продолжать отправлять того же клиента даже после выхода более новой версии. Proxy Finder принимает все четыре поля внутри своего объекта request. Полный список параметров находится в справочнике по API, а Playground читает тот же каталог, поэтому в его выпадающих списках доступны только те варианты, которые может запросить ваш код. Те же четыре поля передаются внутри foura_single и foura_proxy на MCP server, поэтому агент может повторить запрос от имени другого браузера вместо того, чтобы просто вернуть ошибку 403.
Две вещи, которые система намеренно отказывается делать.
Комбинация, которой нет в каталоге, приводит к ошибке с указанием доступных вариантов для этого браузера. Откат к значению по умолчанию отправил бы клиента, которого вы не выбирали и не видите в ответе. Выбор профиля с unblocker: false также отклоняется, так как этот флаг отвечает за передачу заголовков (что на самом деле делает этот флаг). Половина профиля хуже, чем его полное отсутствие.
Сам каталог формируется на основе измерений, а не ручного ввода. Скрипт прогоняет каждый профиль через реальный путь запроса и фиксирует то, что фактически уходит в сеть. Это важнее, чем кажется: между двумя недавними мажорными версиями одного браузера изменилась строка подстановки бренда и порядок брендов поменялся местами. Именно такие детали считывают системы защиты.
Impact
Вот часть, которой мы не ожидали.
Значение по умолчанию является общим для всех. Клиент, которого представляет ваш запрос, когда вы ничего не указываете, совпадает с клиентом каждого запроса без параметров. Защита, настроенная на простые сигналы, ориентируется именно на это. Сбой выглядит специфически: сайт, блокирующий один браузер, блокирует его на всех ваших выходных узлах. Вы тратите весь лимит повторных попыток, лишь подтверждая, что этот клиент заблокирован.
Мы измерили это трижды на трех вендорах, и каждый раз картина была одинаковой.
Портал недвижимости под защитой PerimeterX отклонил девять попыток со значением по умолчанию. Изменение только платформы, которую заявляет запрос (все остальное без изменений, тот же пул), вернуло страницу шесть раз из шести. Магазин биодобавок под защитой Akamai отклонил значение по умолчанию и без проблем обработал запросы от двух других семейств браузеров. Сайт финансовых новостей под защитой DataDome ответил на значение по умолчанию кодом 401 и заглушкой размером 774 байта, в то время как три других профиля успешно загрузили реальную страницу размером около 760 КБ по двенадцать раз каждый. Мы прогнали этот тест в прямом и обратном порядке, чтобы убедиться, что последовательность запросов не влияла на результат.
Теперь Proxy Finder ротирует семейство браузеров, а не только точку выхода. Для перехода требуется отказ двух независимых точек выхода, поскольку один отказ это всего лишь мнение одной точки. Затем алгоритм идет по цепочке, которая начинается с минимально возможного изменения, платформы, и только после этого пробует другие семейства.
Это ничего не стоит. Ротация меняет то, что отправляет повторный запрос, но не сам факт его отправки, поэтому количество requests и кредитов на задачу остается прежним.
Для продвинутых пользователей
Ротация не мешает работе, и полезно знать ее правила.
Она никогда не срабатывает, если вы явно указали профиль. Она также не срабатывает, если вы передали собственный заголовок user-agent или cookie, и это критически важно: clearance cookie привязана к клиенту, который ее получил, поэтому смена сигнатуры во время воспроизведения рабочей сессии сломала бы успешный запрос. Зафиксируйте то, что нужно, и оно останется неизменным.
Не каждый сбой считается поводом для смены профиля. Учитываются ответы от известных систем защиты. Также учитываются прямые статусы отказа (401, 403, 429, 503) без указания конкретной системы защиты, и это оказалось важным. В одной задаче вернулось восемь отклонений по статусу без опознания системы защиты: реальные отказы, которые ротация игнорировала, доверяя только детектору. Отсутствующая страница или блокировка по стране не учитываются. Это ответы о вашем URL и вашей геолокации, а не о вашем клиенте.
Вы видите все детали. Успешный response от Proxy Finder содержит profile только тогда, когда выбор сделали мы, но не тогда, когда его указали вы. Завершившаяся сбоем задача содержит attemptReport.profilesTried: список отправленных семейств в порядке первого использования, со значением default для запроса, ушедшего без изменений. Без этого поля ситуации "мы попробовали четыре браузера, и каждый получил отказ" и "мы вообще не меняли браузер" снаружи выглядят одинаково.
Полезная привычка: проверяя, помогает ли профиль, фиксируйте все остальные параметры. В обзоре инструментов тестирования фингерпринтов за 2026 год от Scrapfly это описано точно: изменение трех переменных между запусками показывает, что результат есть, но не дает понять, какое именно изменение сработало. Тот же target, та же точка выхода, одно измененное поле. Именно так были получены все приведенные выше цифры.
Что дальше
Список кандидатов расширяется только на основе измерений, по одной цели за раз. Семейство добавляется после того, как мы увидели, что оно открывает целевой ресурс, недоступный для профиля по умолчанию, а не на основе предположений. При этом каталог перепроверяется при каждом обновлении движка, а не переносится вслепую.
Такова специфика этой задачи. Лучшая клиентская сигнатура это постоянно меняющаяся цель, ее отслеживание требует непрерывной работы, а не разового релиза, и то, что работало в прошлом квартале, сейчас уже внесено в чьи-то списки блокировок. Поэтому это поле, которое вы настраиваете, и каталог, который вы можете просматривать, а не число, выбранное нами за вас.