LWP::UserAgentのtimeoutハンドリング




LWP::UserAgentを使用する際のtimeoutハンドリングで、
evalで囲って$@を見てたけど必要なかった。

タイムアウトエラーのみ、他のエラーと違う処理をする場合に。

[perl]
use strict;
use warnings;
use LWP::UserAgent;

my $url = ‘http://hogehogehoge.jp’; # *1
my $ua = LWP::UserAgent->new(
agent => ‘timeoutest/1.0’,
timeout => 10,
);
my $res;
eval {
$res = $ua->get($url);
};
if ($@ and $@ =~ /timeout/) {
# timeout エラー処理
} elsif ($res->is_error) {
# timeout以外のエラー処理
} else {
# 成功処理
}
[/perl]

eval{}する必要はない。

[perl]
use strict;
use warnings;
use LWP::UserAgent;

my $url = ‘http://hogehogehoge.jp’; # *1
my $ua = LWP::UserAgent->new(
agent => ‘timeoutest/1.0’,
timeout => 10,
);
my $res = $ua->get($url);
if ($res->is_success) {
# 成功処理
} elsif ($res->is_error and $res->status_line =~ /timeout/) {
# timeout エラー処理
} else {
# timeout以外のエラー処理
}
[/perl]

$@も$res->status_lineも文字列’500 read timeout’を返す。

*1 hogehogehoge.jpはダミー。hogehoge.jpが存在した!
hogehogehoge.jpではwebサーバを立ち上げて、
LWP::UserAgentで設定したtimeoutよりも長い時間のsleepを入れておいてテスト。


この記事が気に入ったら
いいね!してね

最新情報をお届けします!

この記事が気に入ったら
いいね!してね

最新情報をお届けします!