所以我已经研究了互联网的尽头(至少我是这么认为的)关于这个问题。我正在尝试为alarm
a 设置 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 机械化超时不适用于 https 和 在 Perl 中执行超时的方法?
到目前为止,我看到了使用 LWPx::ParanoidAgent 的建议,不确定我是否理解“使用 LWPx::ParanoidAgent 并将其混入 Mech”部分
可以在 https 上的 WWW::Mechanize 中使用超时吗?
或修补 LWP::UserAgent
关于如何让超时与警报一起工作的任何想法?
谢谢!