Что нового
Теперь endpoint /api/auto является самым коротким путем к получению рабочего response для любого URL. Направьте его на цель. Auto выбирает, пропустить ли request через Single, Proxy Finder или Browser, обрабатывает антибот-проверки при их обнаружении и возвращает сессию, которую может переиспользовать ваш следующий вызов.
Один endpoint. Любая цель. Никакого переключения режимов с вашей стороны.
В этом вся суть. Остальная часть поста посвящена тому, как это работает, сколько это стоит и где скрыты подводные камни.
Как это работает
Под капотом Auto находится лестница уровней (сначала дешевые, затем дорогие). При каждом request Auto поднимается по этой лестнице, пока один из уровней не вернет response, который принимают ваши правила validate.
Уровни по порядку:
- Кэшированная сессия. Если у Auto есть прогретая сессия для этого хоста от предыдущего вызова, он сначала выполняет повтор через нее. Самый дешевый путь.
- Proxy Finder. Ротируемый proxy request. Подходит для сайтов, защищенных в основном репутацией IP.
- Browser. Полный рендеринг, который выполняет JavaScript, решает антибот-задачи и собирает cookie, выдаваемые сайтом.
Как только уровень срабатывает, Auto сохраняет найденную сессию: использованный ID proxy, выданные сайтом cookie и User-Agent. При следующем вызове к тому же хосту Auto сначала пробует эту сессию. Если она все еще работает, вы платите за дешевый уровень, а не за дорогой.
Минимальный вызов:
curl -X POST "https://api.foura.ai/api/auto" \
-H "Authorization: Bearer pk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/data",
"validate": { "status": { "accept": [200] } }
}'
Сокращенный ответ:
{
"status": 200,
"data": "...",
"headers": [...],
"meta": {
"rung": "cache",
"solved": false,
"attempts": 1,
"credits": 2
},
"session": {
"proxy": "CLN1B8",
"cookies": [{ "name": "cf_clearance", "value": "..." }],
"userAgent": "..."
}
}
Для вашей дальнейшей разработки важны два поля. meta.rung показывает, какой путь сработал. session это тройка значений, которую можно передать в вызов /api/single, чтобы самостоятельно повторить тот же exit. Поле proxy это непрозрачный идентификатор в формате base36 (без сырых IP-адресов), который безопасно логировать и передавать между системами.
Результаты
Здесь важны два числа.
Первый вызов к защищенному сайту запускает ступень Browser: рендер, решение CAPTCHA, сбор cookie, выдача страницы. Это стоит около 10 кредитов. Как только Auto кэширует рабочую сессию для этого хоста, последующие вызовы проходят через Single за 2 кредита. Поэтому второй вызов в 5 раз дешевле первого, и каждый последующий обходится по дешевому тарифу, пока жива сессия. Мы измерили это на проде во время запуска: exit без cookie (после их нахождения) повторяются ровно за 2 кредита за вызов по сравнению с 10, которые они стоили раньше, когда каждый запрос проходил через Proxy Finder.
Второе число: неудачные ступени не тарифицируются. Если Auto пробует три прокси и каждый возвращает 403 до того, как четвертый доставит результат, учитываются только кредиты за четвертый. Вы платите за доставленный контент, а не за поиск.
В этом главная ценность. Дорогая ступень выполняется один раз, дешевая ступень выполняется всегда после, и вам не нужно самостоятельно писать логику кэширования.
Стоит отметить еще два поведения, так как они решают реальные проблемы на проде:
Цели с гео-блокировкой перестают тратить exit впустую. Когда сайт возвращает 451 (или заглушку о юридической блокировке) для большинства exit, Auto запоминает, какие страны действительно доставили контент. При следующем вызове он сначала берет свежие exit из этих стран и распределяет между ними параллельную нагрузку. Так что один удачный exit не перегружается запросами и не попадает под rate limit.
Валидация выполняется на каждой ступени. Страница с неверным контентом (гео-блокировка, которая возвращает статус 200 с юридическим уведомлением в body) никогда не считается успешной. Если ваш validate.data.fail содержит "legal reasons", Auto продолжает перебор, пока ступень не пройдет валидацию. Ни кэшированная ступень. Ни любая другая ступень. Если ни одна не проходит, вы получаете честную ошибку с реальной причиной.
Для продвинутых пользователей
Несколько настроек, которые имеют значение, когда вы пропускаете большие объемы через Auto.
timeout_ms это бюджет на всю операцию, а не на отдельную ступень. По умолчанию 120 секунд. Auto распределяет его: каждый подвызов получает минимум (свой естественный таймаут, оставшийся бюджет), и цепочка прекращает запуск новых ступеней, когда остается слишком мало времени. Установите 20,000 для работы с интерактивными задержками. Оставьте значение по умолчанию для массового сканирования, которое допускает долгие хвосты.
forceProxy включено по умолчанию. Auto никогда не обращается к цели с исходного IP-адреса FourA, если вы не установите forceProxy: false. Один нюанс: некоторые сайты (интерактивный Cloudflare с проверкой доверия к IP) на самом деле работают лучше с чистого IP-адреса дата-центра, чем с резидентного exit с низким уровнем доверия. Поэтому forceProxy: false может сделать работу с некоторыми целями проще, а не сложнее. Если вы постоянно сталкиваетесь с проверками на определенном хосте, стоит попробовать отключить эту настройку.
ignoreProxies представляет собой клиентский список исключений. Передайте идентификаторы proxy, которые уже скомпрометированы (из предыдущего session.proxy, который получил rate limit на вашей стороне), и Auto пропустит их везде: при повторном использовании прогретых сессий, поиске выходных узлов и во вложенном вызове к Proxy Finder. Таким образом, Auto не выберет повторно тот узел, который вы указали избегать.
meta также позволяет вам создавать собственные дашборды: какие хосты достигли уровня браузера сегодня, среднее количество попыток на доставку, соотношение запросов solved-challenge к чистым. Если стоимость конкретного хоста внезапно поднимается с 2 кредитов до 10, это сигнал деградации сессии, на который вы можете отреагировать до того, как вырастет ваш счет.
Пример, который объединяет все четыре элемента:
import requests
r = requests.post(
"https://api.foura.ai/api/auto",
headers={"Authorization": "Bearer pk_live_..."},
json={
"url": "https://example.com/product/9876",
"timeout_ms": 30000,
"forceProxy": True,
"ignoreProxies": ["CLN1B8", "K7X9AB"],
"validate": {
"status": {"accept": [200]},
"data": {"accept": ['"price":'], "fail": ["captcha", "legal reasons"]}
}
}
).json()
# If Auto delivered, keep the session for the next call to this host
if r.get("status") == 200 and "session" in r:
session = r["session"] # {proxy, cookies, userAgent}
print(r["meta"]["rung"], r["meta"]["credits"], r["meta"]["attempts"])
Для самой схемы validate см. предыдущее руководство в Validate Rules теперь определяет, что считать успехом.
Что дальше
В настоящее время в планах развития Auto есть две задачи.
Далее в Dashboard появится инспекция сессий. Сейчас сессии, которые Auto сохраняет для каждого хоста, находятся внутри сервиса, и при отладке с вашей стороны посмотреть не на что. Мы добавляем просмотр сессий по хостам, чтобы вы могли видеть кэшированные сессии, их возраст, время их жизни и историю rung для каждой из них. Плюс кнопку для ручного сброса сессии, когда ваша цель меняется и вы знаете, что кэш устарел.
После этого появится более жесткий контроль затрат. Строгий лимит кредитов на request (никогда не тратить больше X на этот вызов, возвращать честную ошибку при превышении) и режим "single-only" для команд, чьим целям никогда не нужен браузерный rung. На сегодняшний день оба режима скрыты за флагами.
Суть Auto в том, что вы не думаете о том, какой продукт вызывать. Но это не означает, что вы не можете проверить результаты. Каждый response передает использованный rung и созданную сессию. Прочитайте эти два поля, и вы точно узнаете, почему ваши вызовы стоят именно столько.