Takuya71 のぶろぐ

外資系ソフトウェア会社で働いてます、認定スクラムマスター

curl を使って JSONデータをPOSTする

WEBアプリの開発で テストの為に JSONのデータをPOSTしたいことがありますが、
curl を使ってコマンドラインからデータをPOSTすることが出来ます。

いつも書き方を忘れるので 備忘録として記録。

curl で JSON データをPOST

% curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"user":{"first_name":"firstname","last_name":"lastname","email":"email@email.com","password":"app123","password_confirmation":"app123"}}'  http://localhost:3000/api/1/users

stackoverflow.com より

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d {JSONデータをここに記述} {URIをここに記述}

という形式です。

curl のダウンロード先

curl は *NIX系のOSだとすでに入っていると思いますが、 linux なら yum install curl や apt-get install curl でインストールできますし、 http://curl.haxx.se/download.htmlから入手できます。
ここには windows版もありますので windows使いの方も入れておいて損はないでしょう。

windows 版 curl で JSONデータを送る場合

コマンドラインからは 複数行に渡る 記述が出来ないので -d の後の部分は “JSON中身” を1行で渡す必要がありますが、
この時 JSON中身の “ を \” と \でエスケープして置く必要があるようです。
めんどうくさ。。
windows版の場合は @filename でファイルにJSONの内容を書いておくほうが楽かもしれません。

> curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "{\"user\" :{\"first_name\":\"firstname\",\"last_name\":\"lastname\",\"email\":\"email@email.com\",\"password\":\"app123\",\"password_confirmation\":\"app123\"}}"  http://localhost:3000/api/1/users

@filename でファイルにJSONの内容を書いておくというのは、 例えば 中身がJSONの内容のファイル: jsondata.txt というファイルを作ります。そしてそのファイル名を指定して curl を実行します。

> curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d @jsondata.txt  http://localhost:3000/api/1/users

というように実行します。 jsondata.txt の前に@を付けて指定します。

curl のお世話になっているリンク