curlでWebAPIのテストをする

最近のクラウドサービスはたいていWebAPIを公開しているので、ちょっとアプリ作ってみようと思えば、結構気軽に作れる(様な気がする←だって作ってないもん)

その辺りのデバッグというか...
そもそも正常動作するかどうかの確認をしてみようと思ったときに、実際にどのようなデータが流れるのか or 具体的にどんなデータを流せばいいのか、を確認してみたいときがあります。

前者はともかく、後者の確認するためには、いちいちアプリを作って云々やるよりもコマンドラインで curl を使えば簡単なので、使い方を纏めておきます。

実際のサービスを叩くのは流石に気が引けるので、ひとまずこんな感じの簡単なスクリプトで試してみます。
要するにHTTPで取得したデータをそのまま返すだけっていうCGIのスクリプトです。

#!/usr/bin/perl
print "Content-Type: text/plain\r\n";
print "\r\n";
$method = $ENV{'REQUEST_METHOD'};
print "method: $method\r\n";
print "---- DATA ----\r\n";
if ($method eq 'GET') {
    print $ENV{'QUERY_STRING'};
} elsif ($method eq 'POST') {
    while (<>) {
        print $_;
    }
}
print "\r\n--------------\r\n";

まずはこれをサーバに置いてWebAPIに見立てた形で、curlを動かしたらどうなるのかを確認してみます。 ※ここではURLをダミーに置き換えてますので、当然以下のコピペでは動きません(^_^;)

$ curl http://www.example.org/echo.pl?query=hoge
method: GET
---- DATA ----
query=hoge
--------------
$ 
$ curl -d query=hoge http://www.example.org/echo.pl
method: POST
---- DATA ----
query=hoge
--------------
$ 

ということで、-dオプションを使ってパラメータを指定するかどうかで、HTTPのGET/POSTを投げ分けて動作する方法が確認出来ました。
さらに細かく、-vオプションを使ってHTTPヘッダの内容を確認することもできます。
大抵の場合はこれでほとんど確認出来ると思うのだけど(^_^;)

$ curl -v http://www.example.org/echo.pl?query=hoge
* About to connect() to www.example.org port 80 (#0)
*   Trying xxx.xxx.xxx.xxx... connected
* Connected to www.example.org (xxx.xxx.xxx.xxx) port 80 (#0)
> GET /echo.pl?query=hoge HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
> Host: www.example.org
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Thu, 31 Mar 2011 14:38:45 GMT
< Server: Apache
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: text/plain
< 
method: GET
---- DATA ----
query=hoge
--------------
* Closing connection #0
$ 

その他にもcurlには認証関係のパラメータなどもあるので、WebAPIをどうやって叩けばいいのかを試してみるだけには非常に便利です。
その辺りの細かい事が知りたい場合は curl --help または curl --manual を見てみれば幸せになれるはず( ´ ▽ ` )ノ