Tatsumaki::HTTPClientというモジュールの紹介
(注)まとまってない上に前置きが長くなります。
前回のエントリTatsumakiとTwiggy使ってみた - punitan (a.k.a. punytan) のメモに関して、LivePostHandlerで新しい項目をpostするときはPOSTを使ったほうが良い、と指摘されたものの、nicoalert.plの方でPOSTするのに必須なAnyEvent::HTTP::http_postの使い方がわからなかったのでgetで実装していました。
AE::HTTPを使おうとすると結構骨が折れる作業になります。
現状の AnyEvent::HTTP はなんと HTTP::Request オブジェクトからのリクエスト送信に対応していないため、自分ですべてのリクエストを組み立てる必要があるようです。
引用元:http://unknownplace.org/memo/2009/07/13/1/
このような仕様なので、AE::HTTPを使うのは非常につらい事になりますが、miyagawaさんからTatsumaki::HTTPClientというAnyEvent::HTTPのラッパーがあるのでそれ使うと良いという情報をいただきました。Tatsumaki::HTTPClientを使うといろいろとうまくやってくれます。ドキュメントがないのが非常に残念ですが、
Tatsumaki/HTTPClient.pm at master · miyagawa/Tatsumaki · GitHubを読めばやっていることがわかります。
使い方
HTTP::Request::Common の引数を普通に書いたあとにコールバックを指定してやれば良い。すばらしい!
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use Data::Dumper; use Tatsumaki::HTTPClient; use AnyEvent; my $cv = AE::cv; my $callback = sub { print Dumper \@_; print "Done\n"; $cv->send; }; my $client = Tatsumaki::HTTPClient->new; $client->post( 'http://www.futomi.com/cgi-bin/lecture/form/posttest.cgi', [ name => 'Gisle Aas', email => 'gisle@aas.no', gender => 'M', born => '1964', perc => '3%', ], $callback ); $cv->recv; exit; 1; __END__