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-out
http_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 つを処理できます。