curl を使って Web API をテストする(1)
例えばスマートフォンアプリを開発していて、データをサーバに保存しないといけない時など、Web APIを使った開発をする機会だけでなく、Web APIそのものを開発する機会が増えて来ていると思います。
Web APIのサーバサイドプログラムを開発する時、Web APIを単体テスト出来るツールを持っていると便利です。クライアント側の開発を待たなくてもサーバ側の開発が進められますし、トラブルが起こった時にサーバ側とクライアント側で問題を切り分けるのにも役立ちます。
今回は Web APIのテストに使えるツールとして、curlの解説をします。Mac OS X や Linux であれば標準でインストールされてされていますし、公式サイトでは Windows用のバイナリも配布されています。
公式サイト: [http://curl.haxx.se/](http://curl.haxx.se/)
## curl の基本的な使い方
curlの基本的な使い方は、以下の通りです。
curl [オプション] 接続先URL
例) curl http://examples.com/hoge.html
デフォルトでは、レスポンスの内容を標準出力に出力します。
## Web API のテストで良く使うオプション
curl には非常にたくさんのオプションがあるのですが、Web APIのテストで良く使うものだけに絞って挙げてみます。
- -L/–location
- レスポンスヘッダに Location: ヘッダが含まれている時(リダイレクトされた時)、リダイレクト先にデータを取得しに行く。
- -I/–head
- HTTP HEADリクエストを送信し、HTTPヘッダのみを取得する。
- -D/–dump-header <file>
-
指定したファイルにレスポンスヘッダを保存する。
-I/–headと似てますが、HEADリクエストを送信するのではなく、GETやPOSTリクエストを送信し、レスポンスボディも表示するところが異なります。
なお、"-D -" とすると、レスポンスヘッダがレスポンスボディと共に標準出力に書き出されます。
- -i/–include
- レスポンスヘッダがレスポンスボディと共に標準出力に書き出される。"-D -"と同じ
- -A/–user-agent <agent string>
- User-Agent: リクエストヘッダを指定する。User Agent を見て処理を分けているAPI(クローラーを拒否している等)をテストする時に便利。
- -e/–referer <URL>
- Referer: リクエストヘッダを指定する。Refererを見て処理を分けているAPIをテストする時に便利。
- -H/–header <header>
-
任意のリクエストヘッダを指定する。-H/–headerを複数回指定することにより、複数のリクエストヘッダを送ることが出来ます。
例) –header "Content-Type: application/json"
- -d/–data <data>
-
HTTP POSTリクエストを送信し、指定したdataをWebサーバに送ります。"Content-Type" は "application/x-www-form-urlencoded"になります。
-d/–data オプションが複数回指定された時は、それらが "&" で結合されてサーバに送信されます。
例) -d ‘user=hoge’ -d ‘password=fuga’ ⇒ "user=hoge&password=fuga" として送信される。
- -F/–form <name=content>
-
"Content-Type: multipart/form-data" でHTTP POSTリクエストを送信します。content 部に @ を先頭に付けてファイル名を指定すると、そのファイルをアップロードすることが出来ます。
例) -F ‘password=@/etc/passwd’ ⇒ /etc/passwd ファイルがアップロードされる
次のように "type=" を指定することによって、アップロードされるファイルの "Content-Type" を指定することが出来ます。
例) -F ‘passwd=@/etc/passwd;type=text/plain’
また、"filename=" を指定することにより、アップロードされるファイルのファイル名を指定することが出来ます。
例) -F ‘passwd=@/etc/passwd;filename=secret.txt’
- -c/–cookie-jar <file name>
- WebサーバからCookieが送信されて来た時、指定したファイルに保存します。
- -b/–cookie <name=data>
-
"NAME1=VALUE1;NAME2=VALUE2" という形式で Cookie を送信します。
引数に "=" が含まれていない時は、引数はファイル名と解釈され、そのファイルの中身が Cookie として送信されます。この場合のファイルのフォーマットは、-c/–cookie-jar で保存されたものと同じです。
- -u/–user <user:password>
-
認証に使うユーザ名とパスワードを送信します。
デフォルトはBasic認証ですが、–digestオプションを一緒に使うと Digest認証になります。
- -O/–remote-name
-
Webサーバからのレスポンスを標準出力に出力するのではなく、リモートファイルと同じ名前のファイルに保存します。
例) curl -O http://www.examples.com/hoge.html ⇒ レスポンスは hoge.html というローカルファイルに保存される
- -o/–output <file>
- レスポンスを標準出力に出力するのではなく、指定したファイルに保存する。
結構長くなってしまったので、実際の使い方はまた次回。
**[7/6追記]** “-i/–include” オプションを追記しました。