Statuscode und Text in Curl zurückgeben

Statuscode und Text in Curl zurückgeben

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, 400was ich sehen kann, und ich kann auch den Antwortfehler Invalid product: product does not existsehen, also ist das gut.

Ist es jedoch möglich, den Rest des Displays zu entfernen?

Antwort1

Anstatt -idie Antwortheader anzuzeigen, können Sie -w/ --write-outmit einer Formatzeichenfolge verwenden, die die http_codeVariable enthält:

curl --write-out '%{http_code}\n' ...

würde den Antwortstatus (und eine neue Zeile) nach dem Text ausgeben. Suchen Sie man curlnach 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.

verwandte Informationen