1. ホーム
  2. linux

[解決済み] curlでbodyの生データを投稿するには?

2022-03-07 08:42:12

質問

重複して投稿される前に;SO周辺で見つけた多くの提案を試しました。

これまで私は、postmanを使ってJavaのWebサービスにデータをポストしてきました。それは以下のように素晴らしい働きをします。

今度はcurlを使って同じことをしたいので、以下の方法で試してみました。

$ curl -X POST --data "this is raw data" http://78.41.xx.xx:7778/
$ curl -X POST --data-binary "this is raw data" http://78.41.xx.xx:7778/
$ curl -X POST --data "@/home/kramer65/afile.txt" http://78.41.xx.xx:7778/
$ curl -X POST --data-binary "@/home/kramer65/afile.txt" http://78.41.xx.xx:7778/

残念ながら、これらはすべて、受信側で空のrawボディを表示します。

誰か、私がここで何を間違えているのか知っていますか?私のcurlリクエストは私のpostmanリクエストとどう違うのでしょうか?すべてのヒントを歓迎します。

解決方法は?

curlの --data はデフォルトで Content-Type: application/x-www-form-urlencoded をリクエストヘッダに追加します。しかし、Postmanの raw ボディモードでは、Postman は Content-Type: text/plain をリクエストヘッダに追加します。

そこで、Postmanと同じことを実現するために、以下のように指定します。 -H "Content-Type: text/plain" をcurlで使用します。

curl -X POST -H "Content-Type: text/plain" --data "this is raw data" http://78.41.xx.xx:7778/

もしPostmanが送るリクエスト全体を見たい場合は、packed appのデバッグを有効にすることができることに注意してください。チェック このリンク をご覧ください。それからアプリを検査し(Postmanで右クリック)、Postmanから送られた全てのリクエストを network タブに表示されます。