Частые проблемы

Решения наиболее распространенных проблем при использовании FourA API.

Пустой или неполный контент

Симптом: API возвращает статус 200, но поле data пустое или не содержит ожидаемого контента.

Причина: Целевая страница использует JavaScript для отрисовки контента после первоначальной загрузки страницы.

Решение: Переключитесь с endpoint single на endpoint browser. Используйте checkText для проверки загрузки контента:

curl -X POST https://eu.api.foura.ai/api/browser/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/products",
    "timeout_ms": 15000,
    "checkText": "product-list"
  }'

Примечание: endpoint browser возвращает контент в поле body (а не data).

Ошибки 403 Forbidden или страницы с Captcha

Симптом: API возвращает HTML, содержащий проверку Captcha или страницу отказа в доступе.

Причина: Целевой сайт определил request как автоматический и заблокировал его.

Решение: Используйте endpoint proxy для автоматической ротации IP:

curl -X POST https://eu.api.foura.ai/api/proxy/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "maxTries": 5,
    "request": {
      "method": "GET",
      "url": "https://example.com/prices",
      "unblocker": true
    }
  }'

Если проблема сохраняется, увеличьте maxTries, чтобы предоставить ротации proxy больше попыток.

Ошибки тайм-аута

Симптом: Выполнение requests завершается ошибкой по тайм-ауту.

Причина: Загрузка целевой страницы занимает больше времени, чем настроенный тайм-аут.

Решение: Увеличьте timeout_ms (по умолчанию 15s для single, 30s для browser, 45s для proxy):

curl -X POST https://eu.api.foura.ai/api/browser/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://slow-site.com",
    "timeout_ms": 60000
  }'

Для requests через browser также убедитесь, что значение checkText действительно появляется на странице. Опечатка всегда будет приводить к тайм-ауту.

429 Too Many Requests (лимит RPM)

Симптом: API возвращает статус 429 с сообщением "rate limit exceeded".

Причина: Вы превысили свой лимит запросов в минуту (RPM). Это отличается от лимитов на параллельные запросы (см. 503 ниже).

Решение: Используйте поле retryAfter из response, чтобы подождать необходимое количество времени перед повторной попыткой:

import time
import requests

def make_request(endpoint_url, payload, retries=3):
    for i in range(retries):
        resp = requests.post(
            endpoint_url,
            headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
            json=payload
        )
        if resp.status_code == 429:
            body = resp.json()
            wait = body.get("retryAfter", 2 ** i)
            time.sleep(wait)
            continue
        return resp
    raise Exception("Rate limit not resolved after retries")

# Example: single request
make_request(
    "https://eu.api.foura.ai/api/single/",
    {"method": "GET", "url": "https://example.com"}
)

Проверьте текущее использование в Dashboard, чтобы узнать свои rate limits.

503 Service Unavailable

Симптом: API возвращает статус 503.

Причина: Это происходит в двух случаях:

  1. Достигнут лимит параллельных запросов. У вас запущено слишком много одновременных requests. Это отличается от ошибки 429, которая ограничивает количество запросов в минуту. При ошибке 503 вы не превысили свой RPM, но исчерпали максимальное количество requests, которые могут выполняться одновременно.
  2. Сервис временно недоступен. Проводятся технические работы.

В обоих случаях response содержит поле retryAfter.

Решение: Подождите указанное в retryAfter количество секунд, затем повторите попытку:

import time
import requests

def make_request_with_retry(endpoint_url, payload, retries=3):
    for i in range(retries):
        resp = requests.post(
            endpoint_url,
            headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
            json=payload
        )
        if resp.status_code in (429, 503):
            body = resp.json()
            wait = body.get("retryAfter", 2 ** i)
            time.sleep(wait)
            continue
        return resp
    raise Exception("Request not resolved after retries")

Если вы регулярно сталкиваетесь с лимитами параллельных запросов 503, уменьшите количество параллельных requests в вашем конвейере сбора данных или проверьте лимит параллельных запросов вашего тарифного плана в Dashboard.

Ошибки аутентификации 401

Симптом: Каждый request возвращает ошибку 401 Unauthorized.

Чек-лист:

  1. Убедитесь, что header указан как X-API-Key: YOUR_API_KEY (а не Authorization: Bearer или Api-Key)
  2. Проверьте наличие лишних пробелов или символов перевода строки в вашем API key
  3. Создайте новый ключ в Dashboard, если текущий мог быть скомпрометирован

Неожиданный HTML вместо JSON

Симптом: Вы ожидали получить JSON от целевого сайта, но получили HTML.

Причина: Целевая страница может отдавать разный контент в зависимости от headers.

Решение: Добавьте header Accept и включите unblocker для использования реалистичных headers браузера:

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://api.example.com/data",
    "headers": [["Accept", "application/json"]],
    "unblocker": true
  }'

Вы также можете установить tryJsonData в значение true, чтобы FourA автоматически разбирал JSON responses.

Все еще нужна помощь?

Если ни одно из вышеперечисленных решений не помогло:

  1. Проверьте status page на наличие текущих инцидентов
  2. Просмотрите метрики ваших requests в Dashboard
  3. Свяжитесь с поддержкой по адресу support@foura.ai, указав детали вашего request

Следующие шаги

Обновлено: 27 апреля 2026 г.