Проверки на сайтове
Когато целевият сайт изпълни 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 на стандартната цена.
Три неща чупят повторното изпълнение:
- Различен изходен адрес. Фиксирайте proxy ID, което response на преминаването върна. Вижте Reuse a Proxy Across Requests.
- Различен User-Agent. Browser responses връщат стойността
userAgent, която са използвали. Изпратете я обратно заедно с cookie. - Изтичане на валидността. Разрешенията имат свой собствен живот, зададен от целевия сайт. Това на 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 е това, което спира стълбицата да приеме страница с предизвикателство и да я отчете като готова.
Свързани
- Защитени сайтове: Кой engine да използвате за всяко ниво на защита
- API Endpoints: Справочник за request и response за всички четири endpoint-а
- Преизползване на proxy между заявки: Фиксиране на изхода, към който е обвързан clearance-ът
- Smart Fetch (Auto): Как
meta.solvedсе вписва в стълбицата - Response Headers: Къде се показва цената в кредити на дадено извикване