Результаты запросов
Каждый request к FourA API классифицируется ровно по одному результату (outcome), как и каждый туннель через порт proxy. Outcome вычисляется один раз, в конце вызова, и записывается для учетных данных, выполнивших его. Панель управления, лента активности и биллинг считывают одно и то же поле.
Только success расходует кредиты. Премиум-трафик учитывается отдельно от кредитов и не зависит от outcome: см. Billing Implications.
Семь вариантов outcome
Вот семь вариантов, которыми может завершиться request. Туннель использует пять из них: см. раздел Tunnels Use the Same Vocabulary ниже.
| Outcome | Уровень | Что это значит |
|---|---|---|
success |
н/д | Доставлен корректный response. Учитывается в вашей тарифицируемой квоте. |
application_error |
target | Целевой ресурс вернул HTTP 200, но тело ответа содержит поле ошибки или представляет собой страницу проверки на ботов, распознаваемую FourA. |
application_fail |
target | Целевой ресурс вернул статус не 2xx, который не был принят вашими правилами validate, либо response не получен вовсе, включая невозможность разрешить имя хоста. |
client_error |
caller | Ваш request был отклонен до выхода из FourA. Неверные параметры, некорректное значение proxy, URL заблокирован защитой от SSRF. |
rate_limit |
FourA | В выполнении request отказано до его запуска: из-за лимитов тарифного плана (403 для endpoint или параметра, не входящего в план; 429 при исчерпании лимита) либо из-за общих ограничений платформы по RPM или параллельным соединениям. |
service_error |
FourA | Движок вернул ошибку сервера, или тело ответа не являлось валидным JSON. |
service_fail |
FourA | Сбой в сети FourA: движок не ответил вовремя, соединение оборвалось или вы отключились. |
Колонка уровня указывает на источник проблемы:
- Результаты target относятся к запрашиваемому сайту. Ваш request успешно дошел до FourA, а FourA успешно связался с целевым ресурсом. Ошибку вернул сам целевой сайт.
- Результаты caller означают, что request изначально содержал ошибку. Исправьте структуру и параметры запроса.
- Результаты FourA вызваны сбоем с нашей стороны. Повторите попытку и проверьте страницу статуса, если они сохраняются.
Если целевой сайт возвращает 403, это классифицируется как application_fail, а не client_error. Ваш вызов был сформирован верно. Сайт просто ответил отказом.
Успешность зависит от validate
Без validate API помечает request как success только тогда, когда целевой ресурс возвращает HTTP 200.
С validate успешность определяется заданными вами правилами. Если вы укажете API, что для данного request допустимы как 200, так и 403, то 403 вернется как success. Тело ответа при этом будет доставлено вам без изменений.
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"url": "https://target.example/feed",
"validate": {
"status": { "accept": [200, 403] }
}
}'
В этом вызове ответ 403 считается как success и тарифицируется как один request. Ответ 500 считается как application_fail и не тарифицируется.
Та же логика применяется к validate.headers и validate.data. Любой response, который движок принимает согласно вашим правилам, возвращается как success независимо от HTTP status.
Один ответ никогда не бывает success, с validate или без него: это HTTP 200, тело которого является распознанной FourA страницей проверки на ботов, такой как визуальная CAPTCHA или страница, требующая только запуска JavaScript в браузере. Такой request получает статус application_error и не тарифицируется. Тело ответа все равно доставляется вам без изменений, а header X-FourA-Check-Page указывает тип страницы проверки.
Влияние на биллинг
| Outcome | Тарифицируется | Учитывается в квоте |
|---|---|---|
success |
Да | Да |
application_error |
Нет | Нет |
application_fail |
Нет | Нет |
client_error |
Нет | Нет |
rate_limit |
Нет | Нет |
service_error |
Нет | Нет |
service_fail |
Нет | Нет |
Тарифицируются только те запросы, которые вернули запрошенные вами данные. Ошибки на стороне FourA, целевого ресурса или на вашей стороне бесплатны.
Таблица относится к кредитам. Премиум-трафик учитывается отдельно: request, использовавший премиум-выход, учитывает переданный этой попыткой трафик при любом исходе, так как выход был задействован в любом случае. Попытка, которая еще выполнялась, когда ответил другой выход, немедленно останавливается, и переданный ею до этого момента трафик также учитывается.
Стандартный трафик также не зависит от outcome: на тарифе с лимитом полосы трафик каждого request учитывается в квоте. Request, отклоненный одним из лимитов вашего тарифа, не расходует трафик.
Туннели используют ту же терминологию
Туннель через порт proxy также завершается одним из этих исходов, поэтому один набор меток покрывает оба продукта. Возможны только пять из семи исходов, поскольку два исхода target требуют, чтобы FourA проанализировал ответ цели, а ответ туннеля представляет собой ваш собственный зашифрованный трафик.
| Outcome | Значение для туннеля |
|---|---|
success |
Туннель открыт, и ваш инструмент получил доступ. |
client_error |
FourA не открывает этот туннель: приватный или зарезервированный адрес либо необслуживаемый порт. |
rate_limit |
Достигнут один из лимитов вашего тарифа (одновременные туннели, открытия туннелей в минуту, стандартный трафик за период, отсутствие премиум-трафика), либо сам порт исчерпал емкость или лимит частоты открытий. |
service_error |
У FourA не было подходящего выхода для вашего запроса. Обычно это временно. |
service_fail |
Цель недоступна ни через один опробованный FourA выход: DNS, timeout, connection refused. |
application_error |
Никогда не возникает в туннеле. |
application_fail |
Никогда не возникает в туннеле. |
Отказ также сопровождается краткой причиной, и в панели управления она отображается в понятных вам терминах, а не в наших внутренних. Если опция не может быть выполнена FourA, возвращается 400 прямо на уровне соединения, и запись не создается, поэтому в этом списке она не появится вовсе.
| Причина на экране | Что исчерпано |
|---|---|
| port not in plan | Ваш тариф не включает этот proxy порт |
| tunnels at once | Использованы все одновременно доступные по тарифу туннели |
| openings per minute | Исчерпан лимит на открытие туннелей в минуту по вашему тарифу |
| traffic used up | Исчерпан лимит трафика вашего тарифа на текущий период |
| premium not available | Premium трафик сейчас недоступен на вашем тарифе |
| port was full | Достигнута емкость или лимит частоты открытий самого порта. Повторите попытку позже. |
| port not served | FourA не открывает туннели к этому порту |
| private address | Частные и зарезервированные адреса недоступны |
Туннели не тарифицируются в кредитах, так как у туннеля нет request, к которому можно привязать списание. Вместо этого порт учитывает байты. См. раздел Как тарифицируется ваш план.
Анализ результатов в панели управления
Каждый request, сделанный с вашим API key, отображается в ленте Activity с меткой соответствующего исхода. Страницы Metrics и Overview агрегируют это же поле для круговых диаграмм и графиков динамики.
При фильтрации Activity по исходу можно также выбрать конкретный endpoint (Auto, Single, Proxy Finder, Browser), чтобы проверить, характерна ли ошибка для одного из них. Переключите Product на странице на Proxy, и те же фильтры исходов будут применяться к вашим туннелям.
Эвристики повторных попыток
Базовая политика retry на основе полученных исходов:
| Исход | Безопасен ли retry? | Когда повторять |
|---|---|---|
success |
Не применимо | Response уже получен. |
application_error |
Иногда | Проверьте тело ошибки целевого ресурса. Некоторые ошибки временные, но большинство нет. Если задан X-FourA-Check-Page, сайт вернул страницу проверки: отправьте URL в Auto, который обрабатывает проверку как промежуточный шаг, а не финальный ответ. |
application_fail |
Иногда | Если целевой ресурс ограничивает частоту запросов (rate limit), снизьте скорость. Если он блокирует доступ, переключитесь на endpoint Proxy или Browser. |
client_error |
Нет | Request завершится с той же ошибкой. Исправьте входные данные. |
rate_limit |
Зависит от условий | Соблюдайте время ожидания, указанное в ответе: Retry-After, retry_after_seconds или retryAfter. При plan_limit_browser_daily сделайте паузу до полуночи по UTC; при plan_limit_credits или plan_limit_bandwidth остановитесь до наступления resets_at; при plan_limit_feature или plan_limit_premium измените request. |
service_error |
Да | Короткая экспоненциальная задержка (exponential backoff). |
service_fail |
Да | Так же, как для service_error. |
Связанные разделы
- Ошибки API: ответы с ошибками на уровне HTTP
- Порт proxy: коды состояния при отказе туннеля
- Rate Limits: что вызывает
rate_limitи в каких двух форматах возвращается ответ - Метрики: где смотреть детализацию результатов
- Журнал активности: история результатов для каждого request