Итак, я исследовал до конца Интернета (по крайней мере, я так думаю) по этой проблеме. Я пытаюсь установить alarm
тайм-аут в 60 секунд для get()
, но он не улавливается и будет работать более 60 секунд, а также каждый раз, когда достигается тайм-аут по умолчанию (180 секунд) для конструктора www :: Mechanized :: timed , Я получаю сообщение об ошибке ниже:
Использование неинициализированного значения дополнительно (+) в /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;
}
...
Я рассмотрел эти вопросы, чтобы понять, как заставить работать будильник без написания собственной функции тайм-аута.
https://stackoverflow.com/questions/5209915/perl-mechanize-timeout-not-working-with-https и Как делать тайм-ауты в Perl?
Пока я вижу рекомендации по использованию LWPx :: ParanoidAgent, но не уверен, понимаю ли я часть «Используйте LWPx :: ParanoidAgent и смешайте его с мехом».
https://stackoverflow.com/questions/11330610/possible-to-use-timeout-in-wwwmechanize-on-https
или исправление LWP :: UserAgent с помощью
Есть мысли, как заставить тайм-аут работать с будильником?
Спасибо!