Curl pour renvoyer le code d'état http avec la réponse
J'utilise curl pour obtenir des en-têtes http pour trouver le code d'état http et aussi retourner la réponse. Je reçois 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à. Existe-t-il un moyen d'obtenir à la fois la réponse http et le code d'état headers/http dans une commande?
6 réponses
J'ai pu obtenir une solution en regardant le doc curl qui spécifie d'utiliser-pour la sortie pour obtenir la sortie vers stdout.
curl -o - http://localhost
Pour obtenir la réponse avec juste le code de retour http, je pourrais juste faire
curl -o /dev/null -s -w "%{http_code}\n" http://localhost
J'utilise cette commande pour imprimer le code d'état sans autre sortie. De plus, il n'effectuera qu'une requête HEAD et suivra la redirection (respectivement -I
et -L
).
curl -o -I -L -s -w "%{http_code}" http://localhost
Cela rend très facile de vérifier le code d'état dans un script de santé:
sh -c '[ $(curl -o -I -L -s -w "%{http_code}" http://localhost) -eq 200 ]'
, 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 réponse, j'ai utilisé ceci
output_response=$(echo "$request_cmd" | grep body)
echo $output_response
Cette commande
curl http://localhost -w ", %{http_code}"
Obtiendra le corps et le statut séparés par des virgules; Vous pouvez les diviser pour les sortir.
Vous pouvez modifier le délimiteur comme vous le souhaitez.
L'option -i
est celle que vous voulez:
curl -i http://localhost
- i, -- include Include en-têtes de protocole dans la sortie (H/F)
Vous pouvez également utiliser l'option verbose:
curl -v http://localhost
- v, -- verbose rend l'opération plus bavarde