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

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")

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}"

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.