Проверки сайтов

Когда целевой ресурс выполняет проверку на бота при запросе страницы, FourA сообщает об этом. Каждый запрос, встретивший такую проверку, возвращает поле с указанием системы защиты, статусом прохождения проверки и (при успешном прохождении) данными clearance, которые можно повторно использовать для пропуска проверки в следующем вызове.

Эта страница содержит справочную информацию по данным полям. Рекомендации по стратегии см. в разделе Защищенные сайты.

Где находится поле

Endpoint Поле Присутствует, когда
POST /api/single/ defense (object) В ответе обнаружена проверка на бота
POST /api/proxy/ defense (object) То же самое, возвращается ответившей попыткой
POST /api/browser/ defenseSolved (boolean) и defenses (object) Всегда, если страница загрузилась. defenseSolved имеет значение false, а defenses пуст, если ничего не обнаружено.
POST /api/auto/ meta.solved (boolean) В каждом ответе после запуска ladder. true, когда проверка была пройдена на одном из шагов ladder. Ошибки валидации body или неразрешенные хосты обрабатываются до запуска ladder, без meta.

Отсутствие означает, что проверок не обнаружено. Не считайте отсутствие defense ошибкой.

В Single и Proxy для отчетов требуется unblocker, который включен по умолчанию. С параметром unblocker: false страница запрашивается в исходном виде, поэтому Single возвращает challenge без изменений, а Browser отображает его без решения.

defense в Single и Proxy

{
  "status": 200,
  "data": "<!doctype html>...",
  "total_time": 3.61,
  "defense": {
    "vendor": "sgcaptcha",
    "solved": true,
    "present": ["sgcaptcha"],
    "ms": 3412,
    "hashes": 1048576,
    "complexity": 20,
    "cookie": "_I_=<clearance>"
  }
}
Поле Тип Описание
vendor string Система, к которой относится эта запись: та, что была пройдена, или основная обнаруженная. См. список вендоров ниже.
solved boolean true означает, что проверка пройдена и data содержит настоящую страницу. false означает, что data может содержать страницу с проверкой.
present string[] Все системы, распознанные в этом ответе. Может содержать больше имен, чем vendor, а также имена, которые пока никто не обходит.
ms number Время в миллисекундах, затраченное на прохождение проверки. Только при успешном прохождении.
hashes number Объем вычислительной работы, запрошенный проверкой. Только при успешном прохождении.
complexity number Сложность, заявленная проверкой. Только при успешном прохождении и только если проверка сообщает это значение.
answers number Количество предоставленных принятых ответов для проверок, требующих несколько ответов вместо одного. Только при успешном прохождении.
retry string Присутствует, когда тело ответа получено в результате повторной попытки, а не решения проверки. На данный момент единственное значение: refusal-cookies. См. ниже.
cookie string Jar для повторного использования: clearance после успешного прохождения или сессия, выданная при отказе.

solved: false это случай, на который стоит завязать ветвление. FourA никогда не выдает страницу проверки за контент, поэтому этот флаг служит сигналом о том, что тело ответа требует эскалации, а не парсинга.

retry: "refusal-cookies"

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

В этом случае FourA сама отправляет их обратно и передает вам страницу. Ответ при этом содержит retry: "refusal-cookies":

{
  "status": 200,
  "data": "<!doctype html>...",
  "defense": {
    "vendor": "akamai",
    "solved": false,
    "present": ["akamai"],
    "retry": "refusal-cookies",
    "cookie": "bm_sv=...; dp1=..."
  }
}

Интерпретируйте это следующим образом:

  • solved остается false. Ответ на handshake не является прохождением challenge, и он никогда не меняет стоимость вызова. Вы платите за выполненный request.
  • data, это реальный контент, а не страница challenge. Это единственный случай, когда solved: false не означает необходимость эскалации body, именно поэтому данное поле существует.
  • cookie, это session, выданная сайтом. Воспроизведите ее так же, как воспроизводили бы clearance, и последующие страницы обойдут отказ.
  • Повторная попытка (retry) и clear могут произойти в рамках одного request. Если ответом на retry оказался challenge, который FourA может пройти, вы получаете solved: true с собственными полями вендора и retry: "refusal-cookies" рядом с ними.

vendor содержит unknown, когда retry вернул контент и по пути не было распознано никаких систем защиты. В этом случае present является пустым массивом.

defenses в Browser

{
  "status": 200,
  "body": "<!doctype html>...",
  "userAgent": "Mozilla/5.0...",
  "defenseSolved": true,
  "defenses": {
    "present": ["cloudflare"],
    "cleared": ["cloudflare"]
  }
}
Поле Тип Описание
defenseSolved boolean true, если во время загрузки была обнаружена система защиты и ее clearance сохранен на финальной странице. Этот флаг определяет, стоит ли вызов 5 или 10 кредитов.
defenses.present string[] Все системы, распознанные в любой момент во время загрузки страницы, а не только в финальном ответе. Проверка представляет собой произошедшее событие, и к моменту получения реальной страницы ответ с challenge уже давно исчезает.
defenses.cleared string[] Системы, чей clearance сохранен на финальной странице.

Имя в present, которое никогда не переходит в cleared, обозначает систему, которую FourA умеет распознавать, но пока не может проходить. Такие случаи никогда не увеличивают стоимость вызова.

Провайдеры

Значение vendor Система
cloudflare Challenge и bot management от Cloudflare
sgcaptcha Проверка сайта от SiteGround
datadome DataDome
perimeterx PerimeterX
akamai Akamai Bot Manager
incapsula Imperva Incapsula
awswaf AWS WAF challenge
ebay-splashui Собственный challenge от eBay
reddit Собственные проверки и страницы блокировок Reddit
amazon Проверка на робота от Amazon
google JavaScript проверка Google Search
hcaptcha hCaptcha
recaptcha reCAPTCHA
unknown Система не распознана. Появляется только вместе с retry, когда запись сообщает о повторе, а не о конкретном провайдере.

Что проходит обход на данный момент

Endpoint Обход
Single, Proxy sgcaptcha, ebay-splashui. Обе проверки являются вычислительными, а не визуальными, поэтому браузер не задействуется.
Browser cloudflare, sgcaptcha

Все остальные пункты списка только распознаются и передаются в отчете. Это разделение меняется по мере того, как FourA учится проходить другие системы, поэтому проверяйте solved вместо предположений по таблице.

Два важных примечания:

  • hcaptcha и recaptcha также бывают обычными виджетами форм. Они попадают в отчет только тогда, когда response действительно заблокировал доступ (403, 429 или 503), поэтому страница оформления заказа с виджетом проверки в форме не считается защитой.
  • Нахождение за Cloudflare не считается защитой. cloudflare появляется только при наличии реального challenge или артефакта bot-management в response, а не просто из-за использования Cloudflare сайтом.

Повторное использование Clearance

defense.cookie является главной целью этого поля. Clearance привязан к exit node и User-Agent, с которыми он был получен, поэтому отправьте его повторно через ту же пару, и проверка не запустится снова.

import requests

API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

# 1) First call pays for the clear.
first = requests.post(f"{API}/api/proxy/", headers=H, json={
    "maxTries": 5,
    "request": {"method": "GET", "url": "https://example.com/catalog"},
}).json()

defense = first.get("defense", {})
if defense.get("solved"):
    clearance = defense["cookie"]
    exit_id = first["proxy"]

    # 2) Follow-up pages skip the check: same exit, same clearance.
    for page in range(2, 6):
        r = requests.post(f"{API}/api/single/", headers=H, json={
            "method": "GET",
            "url": f"https://example.com/catalog?page={page}",
            "proxy": exit_id,
            "headers": [["Cookie", clearance]],
        }).json()
        print(page, r["status"])

Первый вызов включает стоимость прохождения проверки. Каждый повторный запрос (replay) является обычным request по стандартной цене.

Повторный запрос могут нарушить три фактора:

  1. Другой выходной узел. Зафиксируйте proxy ID, возвращенный ответом с успешным прохождением. См. Reuse a Proxy Across Requests.
  2. Другой User-Agent. Ответы Browser возвращают использованный userAgent. Отправляйте его обратно вместе с cookie.
  3. Истечение срока действия. Прохождения имеют свой срок жизни, установленный целевым сайтом. У SiteGround он составляет около 30 дней для всего сайта; у Cloudflare этот срок обычно значительно короче. Относитесь к прохождению как к кэшу: когда повторные запросы снова начинают возвращать проверки, выполните один свежий вызов и сохраните новый результат.

Сколько это стоит

Пройденная проверка меняет цену только для Browser:

Engine Base Cleared defense
Single 1 (2 с unblocker) Без изменений
Proxy 2 (4 с unblocker) Без изменений
Browser 5 10

Browser списывает 10 только тогда, когда solver был включен и система защиты была действительно пройдена. Распознанная, но не пройденная защита стоит 5, как и страница вообще без проверок.

Страница проверки, которую FourA распознает и отдает с HTTP 200 (например, проверка на роботов Amazon, страница верификации Reddit или JavaScript-проверка Google Search), не тарифицируется ни на одном endpoint; response указывает ее в X-FourA-Check-Page.

Использование в паре с validate

defense сообщает о том, что была обнаружена проверка. validate сообщает FourA, как выглядит настоящая страница, что позволяет запросу завершиться с ошибкой вместо возврата промежуточной страницы, случайно имеющей HTTP 200.

{
  "method": "GET",
  "url": "https://example.com/product/42",
  "validate": {
    "data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
  }
}

В POST /api/auto/ именно validate предотвращает ситуацию, когда ladder принимает страницу с challenge за успешный результат.

Связанные разделы

Обновлено: 30 сентября 2026 г.