Защити срещу ботове
Когато целта изпълни проверка за ботове по пътя към заявената от вас страница, FourA ви уведомява. Всяка заявка, която срещне такава проверка, се връща с поле, посочващо системата, дали проверката е премината успешно, и (при успех) разрешението, което можете да използвате повторно, за да може следващото извикване да я пропусне.
Тази страница е справочник за тези полета. За стратегия вижте Работа със защита срещу ботове.
Къде се намира полето
| Endpoint | Поле | Налично при |
|---|---|---|
POST /api/single/ |
defense (обект) |
Разпозната е проверка за ботове в response |
POST /api/proxy/ |
defense (обект) |
Същото, докладвано от опита, който е отговорил |
POST /api/browser/ |
defenseSolved (булева стойност) и defenses (обект) |
Разпозната е проверка за ботове по време на зареждането на страницата |
POST /api/auto/ |
meta.solved (булева стойност) |
Винаги. true, когато проверка е премината някъде по веригата. |
Липсата означава, че не е разпознато нищо. Не приемайте липсващ defense като неуспех.
Отчитането изисква 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 | Колко приети отговора са предоставени, за предизвикателства, които изискват няколко, а не един. Само при успешно преминаване. |
cookie |
string | Полученото разрешение, готово за повторно използване. Само при успешно преминаване. |
solved: false е случаят, при който си струва да се направи разклоняване. FourA никога не представя нерешено предизвикателство като съдържание, така че флагът е вашият сигнал, че body се нуждае от ескалация, а не от парсване.
defenses на браузър
{
"status": 200,
"body": "<!doctype html>...",
"userAgent": "Mozilla/5.0...",
"defenseSolved": true,
"defenses": {
"present": ["cloudflare"],
"cleared": ["cloudflare"]
}
}
| Поле | Тип | Описание |
|---|---|---|
defenseSolved |
boolean | true когато по време на зареждането е срещната система и нейното преминаване се запазва на финалната страница. Това е флагът, който решава дали заявката струва 15 или 30 кредита. |
defenses.present |
string[] | Всяка система, разпозната в който и да е момент по време на зареждането на страницата, а не само във финалния response. Проверката е нещо, което се е случило, и докато пристигне реалната страница, response за предизвикателството отдавна е изчезнал. |
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 |
hcaptcha |
hCaptcha |
recaptcha |
reCAPTCHA |
Какво се преодолява днес
| Endpoint | Преодолява |
|---|---|
| Single, Proxy | sgcaptcha, ebay-splashui. И двете са изчислителни, а не визуални, така че не участва браузър. |
| Browser | cloudflare, sgcaptcha |
Всичко останало в списъка се разпознава и отчита, и нищо повече. Това разделение се променя, тъй като FourA се учи да преодолява повече от тях, така че четете solved, вместо да предполагате от тази таблица.
Две бележки за крайните случаи:
hcaptchaиrecaptchaса също така обикновени уиджети във формуляри. Те се отчитат само когато response действително ви е блокирал (403, 429 или 503), така че страница за плащане с поле за captcha във формуляр не отчита защита.- Да бъдете зад Cloudflare не е защита.
cloudflareсе появява, когато има реално предизвикателство или артефакт за управление на ботове в response, а не защото даден сайт използва 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"])
Първото извикване носи цената на изчистването. Всяко повторение е обикновена заявка на стандартна цена.
Три неща могат да провалят повторението:
- Различен изход. Фиксирайте proxy ID, което response от изчистването е върнал. Вижте Повторно използване на Proxy в заявки.
- Различен User-Agent. Browser responses връщат
userAgent, който са използвали. Изпратете го обратно заедно с cookie. - Изтичане. Изчистванията имат собствен живот, зададен от целта. За SiteGround той е около 30 дни за целия сайт; изчистване от Cloudflare обикновено е много по-кратко. Третирайте изчистването като кеш: когато повторенията започнат отново да връщат предизвикателства, изпълнете едно ново извикване и вземете новото.
Колко струва
Изчистената проверка променя цената само за Browser:
| Engine | Базова | Изчистена защита |
|---|---|---|
| Single | 1 (2 с unblocker) |
Без промяна |
| Proxy | 5 (10 с unblocker) |
Без промяна |
| Browser | 15 | 30 |
Browser таксува 30 само когато solver е включен и системата е реално изчистена. Система, която е разпозната, но не е изчистена, струва 15, колкото и страница без никаква проверка на нея.
Комбинирайте го с 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 е това, което спира стълбицата да приеме страница с предизвикателство и да я отчете като завършена.
Свързани
- Справяне с Anti-Bot защита: Кой двигател да изберете при всяко ниво на защита
- API Endpoints: Справка за request и response за всички четири endpoints
- Повторно използване на proxy при множество requests: Фиксиране на изхода, към който е привързан clearance
- Smart Fetch (Auto): Как
meta.solvedсе вписва в стълбицата - Response Headers: Къде се показва кредитната цена на извикването