WWW ::机械化::定时HTTPS超时不工作(WWW::Mechanize::Timed http

2019-08-01 15:44发布

所以,我研究到互联网的有关此问题的两端(至少我是这么认为的)。 我想设置一个alarm 60秒超时的get() ,但它并没有被抓住,将运行过去的60秒,也达到了WWW默认的超时时间(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并混入机甲”的一部分

可以使用在WWW超时::对HTTPS机械化?

或修补LWP :: UserAgent的用

http://search.cpan.org/~sharyanto/LWP-UserAgent-Patch-HTTPSHardTimeout-0.04/lib/LWP/UserAgent/Patch/HTTPSHardTimeout.pm

如何让超时与工作报警有什么想法?

谢谢!

Answer 1:

下面的帮助来设置每个警报get()似乎比的try-catch与SIG容易得多alarm除非我失去了一些东西?

use Sys::SigAction qw(timeout_call);

if ( timeout_call( 60 ,sub { $ua->get('https://secured.site.com'); } ))
   {
print "ALARM page timed out after 60 seconds!\n" ;
exit;
}

几乎相同的答案,因为这个问题,但实际的代码的方法来做到超时在Perl?

从文本http://metacpan.org/pod/Sys::SigAction

timeout_call()

$timeout ,$coderef

给定一个参考代码,以及一个超时值(秒),超时()将(在一个eval)设置为SIGALRM一个信号处理程序(其将死亡),设置报警时钟,并执行该代码的参考。 $时间(秒)可以被表示为浮点数。

如果Time ::高分辨率存在并且可用,timeout_call()可以与0.000001秒的计时器分辨率使用。 如果时间:高分辨率不可用,则第二派系值小于1.0的tranparently转换为1。

如果警报响起的代码将被中断。 如果报警被触发之前的代码返回报警被取消。 如果被执行的代码真正的例程返回超时。 (中断)。 通过执行的代码抛出的异常被传播出去。

原始信号处理器被恢复,返回到呼叫者之前。

如果高分辨率不可载入,Sys系统:: sigaction的会做正确的事,并转换

最后一两件事要考虑/牢记:

用sys ::的sigaction的:: timeout_call不安全?



文章来源: WWW::Mechanize::Timed https timeout does not work