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?

29
demandé sur randominstanceOfLivingThing 2016-08-12 00:46:37

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
37
répondu randominstanceOfLivingThing 2018-04-06 20:14:59

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 ]'
18
répondu scriptracer 2018-05-31 08:59:21

, 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
10
répondu user2720864 2017-04-27 07:34:52

Le mode verbeux vous dira tout

curl -v http://localhost
7
répondu ScotchAndSoda 2017-10-11 08:42:45

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.

1
répondu Tech Junkie 2018-09-14 09:24:14

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

0
répondu Owen Pauling 2018-09-27 10:32:32