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

Когато целевият сайт изпълни bot проверка по пътя към заявената страница, FourA ви уведомява. Всяка заявка, която срещне такава, се връща с поле, указващо системата, дали проверката е премината и (при успех) clearance данните, които можете да преизползвате, за да може следващото извикване да я пропусне.

Тази страница е справочник за тези полета. За стратегия вижте Защитени сайтове.

Къде се намира полето

Endpoint Поле Налично при
POST /api/single/ defense (обект) Разпозната е bot проверка в отговора
POST /api/proxy/ defense (обект) Същото, докладвано от отговорилия опит
POST /api/browser/ defenseSolved (булев) и defenses (обект) Винаги, при заредена страница. defenseSolved е false и defenses е празен, когато нищо не е разпознато.
POST /api/auto/ meta.solved (булев) При всеки отговор след стартиране на стълбицата. true, когато проверка е премината някъде по стълбицата. Тяло, което не преминава валидация, или хост, който не се резолва, се отговарят преди стълбицата, без meta.

Липсата означава, че нищо не е разпознато. Не тълкувайте липсващо defense като неуспех.

При Single и Proxy докладването изисква unblocker, което е включено по подразбиране. С unblocker: false сте заявили страницата точно както е дошла, така че Single връща предизвикателството непроменено, а 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[] Всяка система, разпозната в този response. Може да съдържа повече имена от vendor, както и имена, които все още никой не преминава.
ms number Милисекунди, прекарани в преминаване на проверката. Само при успешно преминаване.
hashes number Колко изчислителна работа е изисквало предизвикателството. Само при успешно преминаване.
complexity number Трудността, която предизвикателството е декларирало. Само при успешно преминаване и само когато предизвикателството отчита такава.
answers number Колко приети отговора са предоставени, за предизвикателства, които изискват няколко вместо един. Само при успешно преминаване.
retry string Налично, когато тялото е върнато от повторен опит, а не от преминаване на проверка. Към момента единствената стойност е refusal-cookies. Вижте по-долу.
cookie string Jar, който да се приложи отново: clearance статусът, спечелен при преминаване, или сесията, върната при отказ.

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

retry: "refusal-cookies"

Някои сайтове не изпълняват пъзел. Те отказват първата заявка, задават cookies при отказа и предоставят реалната страница на всеки, който изпрати тези cookies обратно. Страниците с артикули на 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 и никога не променя цената на заявката. Таксувате се за направената от вас заявка.
  • data е реално съдържание, а не challenge страница. Това е единственият случай, в който solved: false не означава, че тялото се нуждае от ескалация, поради което това поле съществува.
  • cookie е сесията, предоставена от сайта. Препратете я по същия начин, както бихте препратили clearance, и следващите страници ще пропуснат отказа.
  • В рамките на една заявка могат да се извършат както retry, така и clear. Ако отговорът на повторния опит се окаже 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 когато е засечена система по време на зареждането и нейното разрешение се съдържа в крайната страница. Това е флагът, който определя дали извикването струва 5 или 10 кредита.
defenses.present string[] Всяка система, разпозната във всеки момент от зареждането на страницата, не само при крайния отговор. Проверката е събитие, което вече се е случило, и докато се зареди реалната страница, отговорът на проверката отдавна го няма.
defenses.cleared string[] Системите, чието разрешение се съдържа в крайната страница.

Име в present, което никога не достига cleared, е система, която FourA може да разпознае, но все още не може да премине. Те никога не увеличават цената на извикването.

Доставчици

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

Какво се преминава в момента

Endpoint Преминава
Single, Proxy sgcaptcha, ebay-splashui. И двете са изчислителни, а не визуални, така че не се използва браузър.
Browser cloudflare, sgcaptcha

Всичко останало в списъка се разпознава и отчита, но нищо повече. Това разпределение се променя с времето, докато FourA се учи да преминава все повече от тях, така че следете стойността на solved, вместо да разчитате на тази таблица.

Две важни бележки за гранични случаи:

  • hcaptcha и recaptcha са също обикновени уиджети във формуляри. Те се отчитат само когато отговорът реално ви блокира (403, 429 или 503), така че страница за плащане с уиджет за верификация във формуляр не се отчита като защита.
  • Наличието на Cloudflare само по себе си не е защита. cloudflare се появява, когато в отговора има реално предизвикателство или артефакт за управление на ботове, а не само защото даден сайт използва Cloudflare.

Повторно използване на разрешение

defense.cookie е основната цел на това поле. Разрешението е обвързано с изходния възел и 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"])

Първото извикване носи цената на преминаването през защитата. Всяко повторение е обикновен request на стандартната цена.

Три неща чупят повторното изпълнение:

  1. Различен изходен адрес. Фиксирайте proxy ID, което response на преминаването върна. Вижте Reuse a Proxy Across Requests.
  2. Различен User-Agent. Browser responses връщат стойността userAgent, която са използвали. Изпратете я обратно заедно с cookie.
  3. Изтичане на валидността. Разрешенията имат свой собствен живот, зададен от целевия сайт. Това на SiteGround трае около 30 дни за целия сайт, докато Cloudflare clearance обикновено е много по-кратък. Третирайте разрешението като кеш: когато повторните заявки започнат отново да връщат проверки, направете едно ново извикване и вземете новото.

Какво струва

Преминатата проверка променя цената само при 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 как изглежда истинската страница, което позволява на даден request да се провали, вместо да ви върне междинна страница, носеща случайно HTTP 200.

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

При POST /api/auto/, validate е това, което спира стълбицата да приеме страница с предизвикателство и да я отчете като готова.

Свързани

Обновено: 30 септември 2026 г.