Проверки сайтов
Когда целевой ресурс выполняет проверку на бота при запросе страницы, 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 по стандартной цене.
Повторный запрос могут нарушить три фактора:
- Другой выходной узел. Зафиксируйте proxy ID, возвращенный ответом с успешным прохождением. См. Reuse a Proxy Across Requests.
- Другой User-Agent. Ответы Browser возвращают использованный
userAgent. Отправляйте его обратно вместе с cookie. - Истечение срока действия. Прохождения имеют свой срок жизни, установленный целевым сайтом. У 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 за успешный результат.
Связанные разделы
- Защищенные сайты: какой движок выбирать для каждого уровня защиты
- API Endpoints: справочник по request и response для всех четырех endpoint'ов
- Повторное использование proxy между requests: привязка к exit node, к которому привязан clearance
- Smart Fetch (Auto): как
meta.solvedвстраивается в ladder - Response Headers: где отображается стоимость вызова в кредитах