最近 curl で API の検証を行う機会が多いのだが、POSTする場合のオプションがいまいちわかってないのでここにメモを残します。
curl オプション(POSTする場合)
-d オプション(--data "データ")
データを POST したのと同じように送るオプションです。
このオプションを指定した場合は "Content-Type:application / x-www-form-urlencoded" のようなデフォルトのヘッダーが含まれます。
'-d' オプションがついていれば POST リクエストであることが明白なので '-X POST' は省略可能です。
エンコード未済のデータを扱いたい場合
エンコード未済のデータを扱いたい場合は、”--data-urlencode" オプションを使用すればエンコードしてから POST してくれます。
json データを扱いたい場合
json 形式のデータを渡したい場合は、以下のようにヘッダを追加します。
$ curl -d '{{json data}}' -H 'Content-Type: application/json' https://example.com
-F オプション(--form "名前=値")
指定した内容をフォームから入力したのと同じように送るオプションです。
このオプションを指定した場合は、Content-Type はデフォルトで「multipart/form-data」が指定されます。
例えばブラウザに以下のフォームがある場合
<form action="submit.cgi" method="post" enctype="multipart/form-data"> Name: <input type="text" name="foo"><br> File: <input type="file" name="bar"><br> <input type="submit" value="Submit"> </form>
-F オプションは、name 属性にマッチさせる形でデータを送信できます。
- key=value 形式で指定
- @ を value の先頭に置くとファイルのデータを「添付して」POST
$ curl -F foo=anonymous -F bar=@file.txt http://example.com/submit.cgi
使い分け
- テキストのみ・バイナリのみなどデータの形式が一つだけの場合は -d を使用
- テキスト&画像データなどデータ形式が複数ある時は -F を使用
そのほかのよく使う curl オプション
詳細出力(-v もしくは --verbose)
詳細情報を出力したい場合は -v オプションを追加します
$ curl -v https://example.com