簡體   English   中英

WWW :: Mechanize :: Timed https超時不起作用

[英]WWW::Mechanize::Timed https timeout does not work

所以我已經研究了關於這個問題的互聯網的終點(至少我是這么認為的)。 我正在嘗試為get()設置60秒的alarm超時但是它不會被捕獲並且將超過60秒,也是在www :: mechanized ::達到默認超時(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

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

有關如何使超時與警報一起工作的任何想法?

謝謝!

以下有助於為每個get()設置一個警報,看起來比使用sig alarm try-catch容易得多,除非我遺漏了什么?

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

給定代碼引用和超時值(以秒為單位),timeout()將(在eval中)設置SIGALRM的信號處理程序(將死亡),設置鬧鍾,並執行代碼引用。 $ time(秒)可以表示為浮點數。

如果Time :: HiRes存在且可用,則timeout_call()可以使用定時器分辨率0.000001秒。 如果Time:HiRes不可用,那么小於1.0的派系第二個值會被轉換為1。

如果警報響起,代碼將被中斷。 如果代碼在觸發警報之前返回,則警報將被取消。 如果正在執行的代碼超時,則例程返回true。 (被打斷了)。 執行的代碼拋出的異常會傳播出去。

在返回調用者之前,恢復原始信號處理程序。

如果HiRes不可加載,Sys :: SigAction將做正確的事情並進行轉換

最后要考慮/記住的事情:

使用Sys :: SigAction :: timeout_call unsafe?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM