web-dev-qa-db-fra.com

Puis-je faire échouer cURL avec un exitCode différent de celui utilisé si le code d'état HTTP n'est pas 200?

Je pensais toujours que lorsque Curl recevait une réponse HTTP 500, il renvoyait un code de sortie qui signifiait un échec (! = 0), mais cela semble être pas le cas.

Existe-t-il un moyen de faire échouer cURL avec un exitCode différent de 0 si le code d'état HTTP n'est pas 200? Je sais que je peux utiliser -w "%{http_code}" mais cela le place dans STDOUT, non pas comme code de sortie (en outre, je suis également intéressé par la capture du résultat, que je ne veux pas rediriger vers un fichier, mais vers l'écran).

204
knocte

curl --fail fait partie de ce que vous voulez:

de man curl :

-f, --fail

(HTTP) Échec silencieux (pas de sortie du tout) sur les erreurs de serveur. Ceci est principalement fait pour permettre aux scripts, etc. de mieux gérer les tentatives infructueuses. Dans les cas normaux, lorsqu'un serveur HTTP ne parvient pas à livrer un document, il renvoie un document HTML le déclarant (qui décrit souvent aussi pourquoi et plus). Cet indicateur empêchera curl de sortir cela et renverra l'erreur 22.

Cette méthode n'est pas sécurisée et il peut arriver que des codes de réponse infructueux glissent, en particulier lorsque l'authentification est impliquée (codes de réponse 401 et 407).

Mais cela bloque la sortie à l'écran.

228
rampion

Si vous souhaitez simplement afficher le contenu de la page courbée, procédez comme suit:

STATUSCODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" URL)

if test $STATUSCODE -ne 200; then
    # error handling
fi

Ceci écrit le contenu de la page dans STDERR lors de l'écriture du code d'état HTTP dans STDOUT, afin qu'il puisse être affecté à la variableSTATUSCODE.

77
Dennis

J'ai été capable de le faire en utilisant une combinaison de drapeaux:

curl --silent --show-error --fail URL

--silent cache les progrès et les erreurs
--show-error affiche le message d'erreur masqué par --silent
--fail renvoie un code de sortie> 0 lorsque la demande échoue

26
rcdmk