所以我在互联网上研究了这个问题(至少我是这么认为的)。我正在尝试设置一个alarm
超时 60 秒get()
但它不会被捕获,并且会运行超过 60 秒,而且每当 www::mechanized::timed 构造函数达到默认超时(180 秒)时,我都会收到以下错误:
在 /usr/lib/perl5/site_perl/5.10.0/WWW/Mechanize/Timed.pm 第 52 行处添加了未初始化值 (+)。
code:
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 https://stackoverflow.com/questions/5209915/perl-mechanize-timeout-not-working-with-https
and
Perl 中如何设置超时? https://stackoverflow.com/questions/2423288/ways-to-do-timeouts-in-perl
到目前为止,我看到了使用 LWPx::ParanoidAgent 的建议,不确定我是否理解“使用 LWPx::ParanoidAgent 并将其混合到 Mech 中”部分
可以在 https 上的 WWW::Mechanize 中使用超时吗? https://stackoverflow.com/questions/11330610/possible-to-use-timeout-in-wwwmechanize-on-https
或修补 LWP::UserAgent
http://search.cpan.org/~sharyanto/LWP-UserAgent-Patch-HTTPSHardTimeout-0.04/lib/LWP/UserAgent/Patch/HTTPSHardTimeout.pm http://search.cpan.org/~sharyanto/LWP-UserAgent-Patch-HTTPSHardTimeout-0.04/lib/LWP/UserAgent/Patch/HTTPSHardTimeout.pm
关于如何让超时与警报一起工作有什么想法吗?
Thanks!