カールのステータスコードと本文を返す

カールのステータスコードと本文を返す

カールを使用してRESTサービス(POSTメソッド)を呼び出して、次のことを取得できますか?

  • HTTPステータスコード。
  • 応答の本文。

他の情報(ヘッダー、メソッドなど)は私のユースケースには関係なく、実際にテストするときに混乱を招く可能性があります。

たとえば、私は次のことをしています:

$ 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

サービスが私が見ることができるものを返していることを知っており、400応答エラーも表示できるのでInvalid product: product does not exist良いです。

しかし、ディスプレイの残りの部分を削除することは可能ですか?

答え1

-i応答ヘッダーを表示する代わりに、変数を含む書式文字列で/を使用できます。-w--write-outhttp_code

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

応答状態(および改行)は本文の後に印刷されます。man curl役に立つ可能性がある他の変数を確認してください。

答え2

@DonHolgoのソリューションに基づいて、次のように書き込みにさらに情報を追加できます。

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

この例の出力はPOSTの応答と結合されます。

{"requestId":"550aa1ff-0001-bf46-79ae-018cfe00dff7"}
http_code=202
exitcode=0

この情報を変数に取り込み、POSTレスポンス(JSON)、HTTPレスポンスコード、cURLコマンドの終了コードの3つを処理できます。

関連情報