web-dev-qa-db-fra.com

comment obtenir curl pour sortir uniquement le corps de réponse http (json) et aucun autre en-tête, etc.

J'utilise curl dans un script bash pour récupérer la réponse d'un service comme ci-dessous,

response=$(curl -isb -H "Accept: application/json" "http://Host:8080/some/resource")

La réponse du service est de type json et sur le navigateur, je pourrais parfaitement répondre.
Cependant, la réponse de curl comporte d’autres éléments indésirables (tels que set-cookie, en-tête content-length dans ce cas) et parfois la réponse réelle est dévorée.

Voici le résultat de echo $response>

 Set-Cookie: rack.session=BAh7CEkiD3Nlc3Npb25faWQGOgZFVEkiRWJlY2JiOTE2M2Q1ZWI4NThjMDdi%0AYjRiOWRjMGMxMGEwYTBkMjE3NmJhZDVjYzY4YjY4ZTlmMTE2ZGVkYWE3MTMG%0AOwBGS
SIJY3NyZgY7AEZJIiVhZmQ2MmUyZGMxMzFmOGEwMjg3NDlhNWM3YmVm%0AN2FjNwY7AEZJIg10cmFja2luZwY7AEZ7B0kiFEhUVFBfVVNFUl9BR0VOVAY7%0AAFRJIi00MTc0OGM2MWNkMzljZTYxNzY3ZjU0
Y2I5OTdiYWRkN2MyNTBkYmU4%0ABjsARkkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsAVEkiLWRhMzlhM2VlNWU2%0AYjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkGOwBG%0A--ee97a62095e7d42129
 tontent-Length: 354c8; path=/; HttpOnly

Cela casse ma logique d'analyse de réponse.
J'ai vu cela se produire par intermittence, ce qui est étrange.

Existe-t-il un moyen d'obtenir "seulement" réponse json à partir de la sortie curl?
J'ai parcouru la documentation de Curl mais je ne pouvais rien voir/ou je l'aurais manqué.
Appréciez toute aide! Merci

59
Rishi

Vous spécifiez l'option -i:

- i, --include

(HTTP) Incluez l'en-tête HTTP dans la sortie. L'en-tête HTTP comprend des éléments tels que nom du serveur, date du document, version HTTP et plus encore ...

Supprimez simplement cette option de votre ligne de commande:

response=$(curl -sb -H "Accept: application/json" "http://Host:8080/some/resource")
102
Remy Lebeau
#!/bin/bash

req=$(curl -s -X GET http://Host:8080/some/resource -H "Accept: application/json") 2>&1
echo "${req}"
1
Victor VIet