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__