1

在使用 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 页面加载速度不快。所以我有两个问题。

  1. Crypt::SSLeay (Net::SSL) 是否提供比 Net::SSLeay (IO::Socket:SSL) 更快的 SSL 算法?

  2. 如何让我的超时再次使用 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

4

0 回答 0