354 votes

Curl pour renvoyer le code de statut http ainsi que la réponse

J'utilise curl pour obtenir les en-têtes http afin de trouver le code d'état http et également de retourner la réponse. Je récupère les en-têtes http avec la commande

curl -I http://localhost

Pour obtenir la réponse, j'utilise la commande

curl http://localhost

Dès que j'utilise le drapeau -I, je n'obtiens que les en-têtes et la réponse n'est plus là. Y a-t-il un moyen d'obtenir à la fois la réponse http et les en-têtes / le code d'état http en une seule commande ?

2 votes

Voici un extrait très utile gist.github.com/maxcnunes/9f77afdc32df354883df

338voto

Suresh Koya Points 726

J'ai pu trouver une solution en regardant la documentation de curl qui spécifie d'utiliser - pour obtenir la sortie vers stdout.

curl -o - -I http://localhost

Pour obtenir la réponse avec seulement le code de retour http, je pourrais simplement faire

curl -o /dev/null -s -w "%{http_code}\n" http://localhost

74 votes

Ou vous pourriez utiliser -i. Ou peut-être -v si vous aimez aussi des informations supplémentaires.

4 votes

Merci @DanielStenberg. La réponse acceptée n'a pas fonctionné pour moi, simplement en utilisant -i a fonctionné.

0 votes

Votre deuxième commande est manquante -I @randominstanceOfLivingThing, sauf s'il s'agit intentionnellement d'une option vide ? Cela ne fonctionne pas pour moi sans cela cependant

172voto

ScotchAndSoda Points 719

Le mode verbeux vous dira tout

curl -v http://localhost

2 votes

Ne fonctionne pas pour moi si la réponse a également une charge utile (dans mon cas, le code d'état qui a été envoyé mais n'a pas été imprimé était 503)

0 votes

Non, cela imprime définitivement également le corps de la réponse

62voto

scriptracer Points 229

J'utilise cette commande pour afficher le code de statut sans aucun autre résultat. De plus, elle ne fera qu'une requête HEAD et suivra la redirection (respectivement -I et -L).

curl -o -I -L -s -w "%{http_code}" http://localhost

Cela facilite grandement la vérification du code de statut dans un script de santé:

sh -c '[ $(curl -o -I -L -s -w "%{http_code}" http://localhost) -eq 200 ]'

5 votes

Cela a déjà été répondu il y a un an. Quelle nouvelle valeur apporte votre réponse? Veuillez également fournir une explication à votre réponse.

24 votes

@MaciejJureczko - La valeur est simple. Pour des raisons de script, cette réponse est la meilleure de toutes les autres réponses, car elle donne un seul code d'état au lieu de nombreuses lignes de données inutiles avec ledit code d'état.

4 votes

Mais l'OP précise spécifiquement qu'ils veulent à la fois le code de statut et le corps de réponse. Ils savent comment obtenir simplement le code de réponse (indiqué dans la question)

24voto

user2720864 Points 6071

J'ai utilisé ceci :

    request_cmd="$(curl -i -o - --silent -X GET --header 'Accept: application/json' --header 'Authorization: _your_auth_code==' 'https://example.com')"

Pour obtenir le statut HTTP

    http_status=$(echo "$request_cmd" | grep HTTP |  awk '{print $2}')
    echo $http_status

Pour obtenir le corps de la réponse, j'ai utilisé ceci

    output_response=$(echo "$request_cmd" | grep body)
    echo $output_response

22voto

Tech Junkie Points 634

Cette commande

 curl http://localhost -w ", %{http_code}"

va obtenir le corps et le statut séparés par une virgule; vous pouvez les diviser pour les obtenir.

Vous pouvez changer le délimiteur comme vous le souhaitez.

4 votes

Bon indice! est-il possible d'ajouter le code de statut devant la sortie?

0 votes

J'ai également trouvé cette réponse très utile. Et pour répondre à la question de @Psychozoic... Je n'ai pas trouvé de solution mais l'ajout de séparateurs de nouvelles lignes a aidé à mettre en évidence le code de réponse du corps de réponse et mon invite de commande apparaissant sur les mêmes lignes que le code de réponse. Essayez ceci: curl http://localhost -w "\nResponse Code: %{http_code}\n"

1 votes

@benhorgen la réponse suivante vous aidera avec cela, vérifiez-la!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X