wie man Curl dazu bringt, nur http response body (json) und keine anderen Header usw. auszugeben

76

Ich verwende Curl in einem Bash-Skript, um die Antwort eines Dienstes wie folgt abzurufen:

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

Die Service-Antwort ist vom Typ JSON und im Browser konnte ich eine sehr gute Antwort geben.
Die Curl-Antwort hat jedoch andere unerwünschte Dinge (wie z. B. Set-Cookie, Header mit Inhaltslänge in diesem Fall), und manchmal wird die tatsächliche Antwort aufgefressen.

Hier ist die Ausgabe von echo $response>

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

Dies bricht meine Antwort-Parsing-Logik.
Ich habe gesehen, dass dies zeitweise passiert, was seltsam ist.

Gibt es eine Möglichkeit, "nur" eine JSON-Antwort von der Curl-Ausgabe zu erhalten?
Ich habe die Curl-Dokumentation durchgesehen, konnte aber nichts sehen / oder ich hätte es übersehen können.
Schätzen Sie jede Hilfe! Danke

Rishi
quelle

Antworten:

125

Sie geben die -iOption an:

-i , - einschließen

(HTTP) Fügen Sie den HTTP-Header in die Ausgabe ein . Der HTTP-Header enthält Dinge wie Servername, Datum des Dokuments, HTTP-Version und mehr ...

Entfernen Sie einfach diese Option aus Ihrer Befehlszeile:

response=$(curl -sb -H "Accept: application/json" "http://host:8080/some/resource")
Remy Lebeau
quelle
Wahr. Aber seltsam ist das; Es funktioniert direkt über die Befehlszeile. Aber vom Bash-Skript verhält es sich anders, ich kann nichts in der
Rishi
2
Das Echo "Antwort ist $ Antwort" von Echo $ Antwort geändert und jetzt kann ich die richtige Antwort sehen. Keine Ahnung, warum das so sein sollte. Vielen Dank!
Rishi
Ein Lernen ist, wenn innerhalb eines Befehls immer eine Echo-Variable "zitiert" wird .. responsenew = $ (Echo "$ response" | grep "abc")
Rishi
Rishi, die Anführungszeichen um $ response vermeiden es, den Inhalt in neuen Zeilen und Leerzeichen zu
beschädigen
-4
#!/bin/bash

req=$(curl -s -X GET http://host:8080/some/resource -H "Accept: application/json") 2>&1
echo "${req}"
Victor VIet
quelle
18
Bitte vermeiden Sie Code-Dumps, versuchen Sie immer zu erklären, was der Code tut, oder geben Sie einen Kommentar ab, auch wenn es sich um einen einfachen Codeblock handelt.
Arco444