
Ist es möglich, mit curl einen REST-Dienst (POST-Methode) aufzurufen und Folgendes zu erhalten:
- Der HTTP-Statuscode.
- Der Antworttext.
Andere Informationen wie Header, Methoden usw. sind für meinen Anwendungsfall nicht relevant und tragen tatsächlich zur Verwirrung beim Testen bei.
Ich mache zum Beispiel:
$ curl -i -H 'Content-Type: application/json' -d @payload.json localhost:8080/apply
HTTP/1.1 100
HTTP/1.1 400
Content-Type: text/plain;charset=UTF-8
Content-Length: 42
Date: Fri, 22 Oct 2021 16:29:18 GMT
Connection: close
Invalid product: product does not exist
Ich weiß, dass der Dienst zurückkehrt, 400
was ich sehen kann, und ich kann auch den Antwortfehler Invalid product: product does not exist
sehen, also ist das gut.
Ist es jedoch möglich, den Rest des Displays zu entfernen?
Antwort1
Anstatt -i
die Antwortheader anzuzeigen, können Sie -w
/ --write-out
mit einer Formatzeichenfolge verwenden, die die http_code
Variable enthält:
curl --write-out '%{http_code}\n' ...
würde den Antwortstatus (und eine neue Zeile) nach dem Text ausgeben. Suchen Sie man curl
nach anderen Variablen, die Sie möglicherweise nützlich finden.
Antwort2
Aufbauend auf der Lösung von @DonHolgo können Sie dem Text weitere Informationen hinzufügen, beispielsweise:
curl --location 'https://foo.acme.com' \
--request POST \
--write-out '\nhttp_code=%{http_code}\nexitcode=%{exitcode}\n' --silent --show-error \
--header 'Content-Type: application/json' \
--data '{"foo": "bar","baz":"bim"}'
Die Ausgabe wird in diesem Fall mit der Antwort von POST kombiniert:
{"requestId":"550aa1ff-0001-bf46-79ae-018cfe00dff7"}
http_code=202
exitcode=0
Sie können dies in einer Variablen erfassen und drei Dinge verarbeiten: die POST-Antwort (JSON), den HTTP-Antwortcode und den Exit-Code vom cURL-Befehl.