前回のエントリに関して、 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__