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
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")
#!/bin/bash
req=$(curl -s -X GET http://Host:8080/some/resource -H "Accept: application/json") 2>&1
echo "${req}"