curlでステータスコードと本文を返す

curlでステータスコードと本文を返す

curl を使用して 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

これを 1 つの変数にキャプチャし、POST 応答 (JSON)、HTTP 応答コード、cURL コマンドからの終了コードの 3 つを処理できます。

関連情報