前回のエントリに関して、 LivePostHandler で新しい項目を通知するときは POST を使ったほうが良い、と指摘されたものの、 nicoalert.pl の方で POST するのに必須なAnyEvent::HTTP ::http_post の使い方がわからなかったので get で実装していました。
AE::HTTP を使おうとすると結構骨が折れる作業になります。
現状の AnyEvent::HTTP はなんと HTTP ::Request オブジェクトからのリクエスト送信に対応していないため、自分ですべてのリクエストを組み立てる必要があるようです。
このような仕様なので、 AE::HTTP を使うのは非常につらい事になりますが、 miyagawa さんから Tatsumaki::HTTPClient という AnyEvent::HTTP のラッパーがあるのでそれ使うと良いという情報をいただきました。 Tatsumaki::HTTPClient を使うといろいろとうまくやってくれます。ドキュメントがないのが非常に残念ですが、
http://github.com/miyagawa/Tatsumaki/blob/master/lib/Tatsumaki/HTTPClient.pm を読めばやっていることがわかります。
使い方
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; __END__