毎回こういうコードを書いている気がするのでスニペットとして登録した。
retry_http_get.pl
use LWP::UserAgent;
use Sub::Retry qw(retry);
my $TryTimes = 3;
my $Interval = 1;
my $UserAgent = LWP::UserAgent->new;
sub _ua { $UserAgent->clone }
sub get {
my ($url, $args) = @_;
$args ||= {};
my $status_line;
my $res = retry(
$args->{try_times} || $TryTimes,
$args->{interval} || $Interval,
sub { _ua->get($url) },
sub {
$status_line = $_[0]->status_line;
return !$_[0]->is_success
},
);
die "$status_line: $url" unless $res;
$res;
}
__END__
my $res1 = get('http://example.com/');
my $res2 = get('http://example.com/', {try_times => 5, interval => 2});