それで、私はこの問題についてインターネットの終わりまで調査しました(少なくとも私はそう思います)。alarm
のタイムアウトを60秒に設定しようとしget()
ていますが、キャッチされず、60秒を超えて実行されます。また、www :: mechanized :: timedコンストラクターのデフォルトのタイムアウト(180秒)に達すると、以下のエラーが発生します:
/usr/lib/perl5/site_perl/5.10.0/WWW/Mechanize/Timed.pmの52行目でさらに(+)初期化されていない値を使用しています。
コード:
use WWW::Mechanize::Timed;
use HTTP::Cookies;
use Try::Tiny;
my $ua = WWW::Mechanize::Timed->new(
autocheck => 0#turning off autocheck becuase any get errors will be fatal need to check ourselves
);
my $cookies = HTTP::Cookies->new(
autosave => 1
);
$ua->cookie_jar($cookies);
$ua->agent_alias("Windows IE 6");
try{
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 60;
$ua->get('https://secure.site.com'); #secure site that timed out
alarm 0;
} catch {
die $_ unless $_ eq "alarm\n";
print "page timed out after 60 seconds!\n";
exit;
};
my $total_time = sprintf '%.3f', ($ua->client_elapsed_time);
unless($ua->success){
print "Error: " . $ua->status;
exit;
}
...
私はこれらの質問を調べて、独自のタイムアウト関数を作成せずにアラームを機能させる方法を理解しました。
Perl Mechanizeのタイムアウトがhttps で 機能せず、Perlでタイムアウトを実行する方法は?
これまでのところ、LWPx :: ParanoidAgentの使用に関する推奨事項を確認していますが、「LWPx::ParanoidAgentを使用してMechにミックスする」の部分を理解しているかどうかはわかりません。
httpsでWWW::Mechanizeでタイムアウトを使用することは可能ですか?
またはLWP::UserAgentにパッチを適用する
タイムアウトをアラームで機能させる方法について何か考えはありますか?
ありがとう!