Problèmes courants
Solutions aux problèmes les plus courants lors de l'utilisation de l'API FourA.
Contenu vide ou incomplet
Symptôme : L'API renvoie un statut 200 mais le champ data est vide ou le contenu attendu est manquant.
Cause : La page cible utilise JavaScript pour charger le contenu après le chargement initial de la page.
Solution : Passez de l'endpoint single à l'endpoint browser. Utilisez checkText pour vérifier que le contenu est chargé :
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"
}'
Note : l'endpoint browser renvoie le contenu dans le champ body (et non data).
Pages 403 Forbidden ou Captcha
Symptôme : L'API renvoie du HTML contenant un défi captcha ou une page d'accès refusé.
Cause : Le site cible a détecté que la request était automatisée et l'a bloquée.
Solution : Utilisez l'endpoint proxy pour une rotation automatique des 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
}
}'
Si le problème persiste, augmentez maxTries pour donner plus de tentatives à la rotation de proxy.
Erreurs de Timeout
Symptôme : Les requests échouent avec une erreur de timeout.
Cause : La page cible met plus de temps à charger que le timeout configuré.
Solution : Augmentez timeout_ms (par défaut 15s pour single, 30s pour browser, 45s pour 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
}'
Pour les requests browser, vérifiez également que votre valeur checkText apparaît réellement sur la page. Une faute de frappe entraînera systématiquement un timeout.
429 Too Many Requests (Limite de RPM)
Symptôme : L'API renvoie un statut 429 avec un message "rate limit exceeded".
Cause : Vous avez dépassé votre limite de requests par minute (RPM). Cela est différent des limites de concurrence (voir 503 ci-dessous).
Solution : Utilisez le champ retryAfter de la response pour attendre le temps nécessaire avant de réessayer :
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"}
)
Consultez votre utilisation actuelle dans le Dashboard pour voir vos rate limits.
503 Service Unavailable
Symptôme : L'API renvoie un statut 503.
Cause : Cela se produit dans deux cas :
- Limite de concurrence atteinte. Vous avez trop de requests simultanées en cours. Cela est différent de l'erreur 429, qui limite les requests par minute. Avec la 503, vous n'avez pas dépassé votre RPM, mais vous avez atteint le nombre maximal de requests pouvant s'exécuter en même temps.
- Service temporairement désactivé. Une opération de maintenance est en cours.
Les deux cas incluent un champ retryAfter dans la response.
Solution : Attendez le nombre de secondes indiqué par retryAfter, puis réessayez :
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")
Si vous rencontrez régulièrement des limites de concurrence 503, réduisez le nombre de requests parallèles dans votre pipeline de scraping, ou vérifiez la limite de concurrence de votre forfait dans le Dashboard.
Erreurs d'authentification 401
Symptôme : Chaque request renvoie un statut 401 Unauthorized.
Checklist :
- Vérifiez que le header est
X-API-Key: YOUR_API_KEY(et nonAuthorization: BearerouApi-Key) - Vérifiez l'absence d'espaces ou de sauts de ligne superflus dans votre clé API
- Créez une nouvelle clé depuis le Dashboard si la clé actuelle est potentiellement compromise
HTML inattendu au lieu de JSON
Symptôme : Vous attendiez du JSON de la part du site cible mais vous avez reçu du HTML.
Cause : La page cible peut servir un contenu différent en fonction des headers.
Solution : Ajoutez un header Accept et activez unblocker pour obtenir des headers de navigateur réalistes :
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
}'
Vous pouvez également définir tryJsonData sur true pour que FourA analyse automatiquement les responses JSON.
Toujours bloqué ?
Si aucune des solutions ci-dessus ne fonctionne :
- Consultez la page de statut pour vérifier s'il y a des incidents en cours
- Examinez les métriques de vos requests dans le Dashboard
- Contactez le support à l'adresse support@foura.ai avec les détails de votre request
Étapes suivantes
- Gestion des erreurs : Référence des codes d'erreur de l'API
- Choisir le bon endpoint : Choisissez la meilleure approche pour votre cible
- Présentation du Dashboard : Suivez vos requests