Защита от ботов
Когда целевой сервер выполняет проверку на ботов на пути к запрошенной странице, FourA сообщает вам об этом. Каждый запрос, столкнувшийся с ней, возвращается с полем, указывающим систему, статус прохождения проверки и (при успешном прохождении) данные для повторного использования, чтобы следующий вызов пропустил ее.
Эта страница является справочником по этим полям. Информацию о стратегии см. в Handling Anti-Bot Protection.
Где находится поле
| Endpoint | Поле | Присутствует, когда |
|---|---|---|
POST /api/single/ |
defense (object) |
В ответе распознана проверка на ботов |
POST /api/proxy/ |
defense (object) |
То же самое, сообщается попыткой, вернувшей ответ |
POST /api/browser/ |
defenseSolved (boolean) и defenses (object) |
Проверка на ботов распознана во время загрузки страницы |
POST /api/auto/ |
meta.solved (boolean) |
Всегда. 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[] | Каждая система, распознанная в этом ответе. Может содержать больше имен, чем vendor, и может содержать имена, которые еще никто не обходит. |
ms |
number | Миллисекунды, затраченные на прохождение проверки. Только при успешном прохождении. |
hashes |
number | Объем вычислительной работы, запрошенной challenge. Только при успешном прохождении. |
complexity |
number | Сложность, заявленная challenge. Только при успешном прохождении и только там, где challenge сообщает о ней. |
answers |
number | Сколько принятых ответов было предоставлено для challenge, которые требуют нескольких ответов, а не одного. Только при успешном прохождении. |
cookie |
string | Допуск, полученный при прохождении, готовый к повторному использованию. Только при успешном прохождении. |
solved: false является случаем, на котором стоит сделать ветвление. FourA никогда не представляет нерешенный challenge в качестве контента, поэтому этот флаг является сигналом о том, что body требует эскалации, а не парсинга.
defenses в Browser
{
"status": 200,
"body": "<!doctype html>...",
"userAgent": "Mozilla/5.0...",
"defenseSolved": true,
"defenses": {
"present": ["cloudflare"],
"cleared": ["cloudflare"]
}
}
| Поле | Тип | Описание |
|---|---|---|
defenseSolved |
boolean | true когда система была встречена во время загрузки, и допуск сохраняется на финальной странице. Этот флаг определяет, стоит ли вызов 15 или 30 кредитов. |
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 |
hcaptcha |
hCaptcha |
recaptcha |
reCAPTCHA |
Что проходится сегодня
| Endpoint | Обходит |
|---|---|
| Single, Proxy | sgcaptcha, ebay-splashui. Обе проверки вычислительные, а не визуальные, поэтому браузер не задействуется. |
| Browser | cloudflare, sgcaptcha |
Все остальное в списке распознается и отображается в отчете, не более того. Это разделение смещается по мере того, как FourA учится обходить новые системы, поэтому читайте solved, а не полагайтесь только на эту таблицу.
Два примечания о граничных случаях:
hcaptchaиrecaptchaтакже являются обычными виджетами форм. О них сообщается только тогда, когда ответ (response) действительно заблокировал вас (403, 429 или 503), поэтому страница оформления заказа с полем CAPTCHA в форме не сообщает о защите.- Нахождение за Cloudflare не является защитой.
cloudflareпоявляется, когда в ответе есть реальная проверка или артефакт управления ботами, а не потому, что сайт использует Cloudflare.
Повторное использование допуска
В defense.cookie заключается весь смысл этого поля. Допуск привязан к выходу (exit), который его получил, и к 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"])
Первый вызов несет затраты на прохождение защиты. Каждый повтор является обычным запросом по обычной цене.
Три вещи ломают повтор:
- Другой выход. Зафиксируйте ID proxy, который вернул ответ прохождения защиты. См. Повторное использование Proxy для запросов.
- Другой User-Agent. Ответы Browser возвращают
userAgent, который они использовали. Отправьте его обратно вместе с cookie. - Истечение срока. Прохождения имеют собственный срок жизни, устанавливаемый целью. Для SiteGround он составляет около 30 дней для всего сайта; прохождение Cloudflare обычно намного короче. Относитесь к прохождению как к кэшу: когда повторы снова начинают возвращать проверки, выполните один свежий вызов и получите новое прохождение.
Сколько это стоит
Пройденная проверка изменяет цену только для Browser:
| Движок | Базовая | Пройденная защита |
|---|---|---|
| Single | 1 (2 с unblocker) |
Без изменений |
| Proxy | 5 (10 с unblocker) |
Без изменений |
| Browser | 15 | 30 |
Browser взимает 30 только когда решатель был включен и система была действительно пройдена. Система, которая была распознана и не пройдена, стоит 15, так же как и страница без проверки вообще.
Сочетайте это с 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 предотвращает завершение работы при получении страницы проверки.
Связанные материалы
- Обработка Anti-Bot защиты: Какой движок использовать на каждом уровне защиты
- API endpoint'ы: Справочник по request и response для всех четырех endpoint'ов
- Повторное использование proxy для нескольких request'ов: Закрепление выхода, к которому привязан допуск
- Smart Fetch (Auto): Как
meta.solvedвстраивается в цепочку - Response header'ы: Где отображается стоимость вызова в кредитах