Docs
Se connecter

Deux statuts, deux questions

La plupart des APIs HTTP ne fournissent qu'un seul code de statut. Crawlbase en fournit deux, car le crawling implique deux couches — l'infrastructure de Crawlbase et le site cible derrière celle-ci.

Statut HTTP
int
Le statut de votre requête vers Crawlbase. 200 signifie que nous l'avons traitée ; 4xx/5xx signifie que nous n'avons pas pu.
pc_status
intheader
Le statut de la requête de Crawlbase vers le site cible. 200 signifie que nous avons obtenu une page propre ; les autres codes décrivent ce qui a échoué en amont.
original_status
intheader
Le statut HTTP brut renvoyé par le site cible. Utile lorsque le site lui-même renvoie un code non-200 que vous devez gérer (404, 403, etc.).
Le modèle mental

Vérifiez toujours d'abord le statut HTTP. S'il est à 200, vérifiez ensuite pc_status. Si celui-ci est à 200, vérifiez alors original_status pour les erreurs côté site.

Codes de statut HTTP

Ce que Crawlbase lui-même a renvoyé à votre client.

CodeSignificationAction
200Requête traitée. Vérifiez pc_status pour le résultat.Passez à pc_status
401Token manquant ou invalide.Vérifiez le token ; assurez-vous qu'il n'a pas été réinitialisé
402Crédits épuisés ou période d'essai expirée.Rechargez le compte
403Le token n'a pas accès à ce produit.Utilisez le bon type de token (Normal ou JS)
422Requête malformée — généralement une URL manquante ou non encodée.Encodez en URL le paramètre url
429Limite de concurrence atteinte.Patientez puis réessayez ; voir Rate Limits
500Erreur interne Crawlbase. Rare et passagère.Réessayez avec un backoff ; consultez la page de statut
503Service temporairement indisponible.Réessayez avec un backoff

Codes pc_status

Ce qui s'est passé durant le crawl proprement dit. Renvoyé sous forme d'en-tête de réponse pc_status sur chaque requête en 200 OK.

Succès

CodeSignification
200Page crawlée avec succès. Le body contient le HTML ou le JSON de la page cible.
201Requête async acceptée. Le résultat sera livré à votre webhook ou stocké sous le rid.

Le site cible a renvoyé une erreur

Crawlbase a atteint le site, mais le site lui-même a renvoyé un code non-2xx. Le body contient ce que le site a renvoyé.

CodeSignification
404La page cible n'existe pas.
410La page cible a été supprimée définitivement.
451Page bloquée pour des raisons légales dans la zone géographique cible.

Bloqué ou filtré

CodeSignificationQue faire
520Le site cible a renvoyé une réponse vide ou invalide.Réessayez ; passez au token JS si ce n'est pas déjà fait
521Le site cible a refusé la connexion.Vérifiez que l'URL est correcte ; le site est peut-être hors service
522Crawlbase n'a pas pu joindre le site cible (timeout).Réessayez ; envisagez d'ajuster page_wait
523Le site cible a renvoyé une erreur de handshake TLS.Le site a peut-être un problème de certificat ; signalez-le au support
525Le défi anti-bot n'a pas pu être résolu automatiquement.Passez au token JS ; certains sites peuvent nécessiter un traitement personnalisé
599Échec générique en amont.Réessayez avec un backoff

Lire la réponse

curl -i 'https://api.crawlbase.com/?token=YOUR_TOKEN&url=https%3A%2F%2Fexample.com'

# HTTP/1.1 200 OK
# pc_status: 200
# original_status: 200
# url: https://example.com/
# content-type: text/html
from crawlbase import CrawlingAPI

api = CrawlingAPI({'token': 'YOUR_TOKEN'})
res = api.get('https://example.com')

# Layer 1: did Crawlbase accept the request?
if res['status_code'] != 200:
    raise RuntimeError(f"Crawlbase: {res['status_code']}")

# Layer 2: did Crawlbase succeed in fetching the page?
if res['pc_status'] != 200:
    raise RuntimeError(f"Crawl failed: {res['pc_status']}")

# Layer 3: did the target site return content?
if res['original_status'] != 200:
    print(f"Site returned {res['original_status']}")

print(res['body'])

Étapes suivantes