在使用 Sys::SigAction timeout_call 从我上一个问题的答案中超时后(注意:这次我使用 WWW::Mechanize 而不是 WWW::Mechanize::Timed),我的 60 秒超时警报正常工作。有一段时间,我以为我在使用 Crypt::SSLeay (Net::SSL) 进行 SSL,但仔细观察后,我意识到代码出于某种原因正在使用 Net::SSLeay (IO::Socket::SSL)我以为 WWW::Mechanize 自动使用了 Crypt::SSLeay。在我开始使用 Net::SSL 后,我注意到 SSL 页面的响应时间有所改善(快了 50%)。但是现在我的 60 秒超时失败并且再次运行超过 60 秒!如果我取出使用 Net::SSL,那么我的 Sys::SigAction 超时 (timeout_call) 将起作用,但 SSL 页面加载速度不快。所以我有两个问题。
Crypt::SSLeay (Net::SSL) 是否提供比 Net::SSLeay (IO::Socket:SSL) 更快的 SSL 算法?
如何让我的超时再次使用 Net::SSL?(也许这是我必须做出的权衡?)
代码:
use Net::SSL
use WWW::Mechanize;
use HTTP::Cookies;
use Sys::SigAction qw(timeout_call);
use Time::HiRes qw(time); #also for use with sigaction?
my ($start_time, $end_time) = 0;
my $ua = WWW::Mechanize->new(
autocheck => 0, #turning off autocheck becuase any get errors will be fatal need to check for errors ourselves
ssl_opts => { verify_hostname => 0 } # if not set to 0 then Crypt::SSLeay will complain that it cant resolve hostnames
);
my $cookies = HTTP::Cookies->new(
autosave => 1
);
$ua->cookie_jar($cookies);
$ua->agent_alias("Windows IE 6");
if ( timeout_call( 60 ,sub { $start_time = time(); $ua->get('https://secure.site.com'); $end_time = time();} ))
{
print "index page timed out\n" ;
exit;
}
my $total_index_time = sprintf '%.3f', ($end_time - $start_time);
print "index load time: $total_index_time\n";
unless($ua->success){
print "Error: " . $ua->status;
exit;
}
...
使用 Net::SSL 加载的模块 -
地穴/SSLeay/CTX.pm
地穴/SSLeay/X509.pm
地穴/SSLeay.pm
网络/SSL.pm
地穴/SSLeay/MainContext.pm
不使用 Net::SSL 加载的模块 -
网络/SSLeay.pm
IO/套接字/SSL.pm
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/Net/SSLeay/randomize.al
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/Net/SSLeay/autosplit.ix