Lorsqu’un test curl affiche 000 comme statut HTTP, curl n’a pas obtenu de code de réponse HTTP final à indiquer. Le site n’a pas envoyé de véritable statut HTTP appelé 000.

Recueillir aussi l’erreur

Cet exemple pour un shell POSIX affiche le champ HTTP final, le champ CONNECT et le code de sortie du processus curl :

curl --proxy http://203.0.113.10:8080 --noproxy '' --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect}\n' https://example.com/
result=$?
printf 'curl_exit=%s\n' "$result"

Remplacez le point de connexion de l’exemple par votre proxy HTTP ou un candidat de la liste de proxys HTTP. Gardez show-error activé : le message d’erreur est souvent l’élément le plus utile. Le champ CONNECT concerne les connexions par tunnel ; ce n’est pas un deuxième statut final du site.

Lire les résultats ensemble

  • Un échec de connexion au proxy peut laisser le champ HTTP à 000.
  • Un délai dépassé avant la réception d’une réponse peut produire le même résultat.
  • Une réponse CONNECT réussie suivie d’un échec TLS peut donner connect=200 et http=000.
  • Une réponse complète du site, par exemple 403, est différente : il existe alors une véritable réponse HTTP à examiner.

Le code de sortie exact et le message permettent de préciser la cause. Cherchez si l’échec s’est produit pendant la localisation du proxy, l’ouverture de la connexion à son port, la négociation du tunnel ou la vérification de la destination.

Ne pas réduire chaque résultat à un contrôle du statut

Un script qui ne conserve que http_code perd l’erreur de transport. Enregistrez aussi le résultat du processus et un message d’erreur débarrassé des données sensibles. À l’inverse, curl peut terminer un transfert avec succès alors que le site renvoie un statut d’erreur, sauf si vous utilisez une option fail adaptée. La réponse HTTP et le résultat d’exécution du client répondent à deux questions différentes.

N’essayez pas de corriger 000 en désactivant la vérification TLS ou en ajoutant un en-tête au hasard. Déterminez d’abord quelle opération n’a jamais atteint une réponse finale.

Articles similaires