Тайм-аут Perl Mechanize не работает с https - PullRequest
0 голосов
/ 06 марта 2011

Я использую библиотеку Perl Mechanize, но по какой-то причине с https параметром timeout (я использую Crypt :: SSLeay для SSL).

my $ browser = WWW :: Mechanize-> new (autocheck => 0, timeout => 3);

Кто-нибудь сталкивался с этим раньше и знает, как это исправить? Спасибо!

Ответы [ 2 ]

1 голос
/ 04 июля 2012

Для HTPS / SSL вы должны сделать обходной путь:

my $html = `wget -q -t 1 -T $timeout -O - $url`;
mech->get(0); 
$mech->update_html($html);
0 голосов
/ 06 марта 2011

При тестировании сейчас с https://www.sourceforge.net/, создается впечатление, что аргумент тайм-аута работает , но не работает до тех пор, пока не произойдет согласование HTTPS. Я установил тайм-аут очень низким, до дробного значения, и он правильно сообщает о тайм-ауте, но есть задержка, намного превышающая мое значение тайм-аута, и затем он сразу же возвращается с ошибкой тайм-аута.

Пример:

#!/usr/bin/perl

use strict;
use warnings;
$|=1;

# This "works", downloading the page within the timeout period
use WWW::Mechanize;
my $mech = WWW::Mechanize->new(
    timeout => 3,
);
$mech->get( 'https://www.sourceforge.net/' );
print "Successful get.\n";

# This throws a connect timeout, but after a delay much longer than 50ms
my $mech2 = WWW::Mechanize->new(
    timeout => 0.05,
);
$mech2->get( 'https://www.sourceforge.net/' );
print "Successful get 2.\n";

Выход:

Successful get.
Error GETing http://sourceforge.net/: Can't connect to sourceforge.net:80
(connect: timeout) at ./throwaway22855.pl line 20

Похоже, что тайм-аут обрабатывается глубоко внизу в IO :: Socket, используя select. В некоторых системах это может помешать работе SIGALRM, поэтому, если вы хотите обойти это и написать собственное время ожидания, обязательно ознакомьтесь с документацией по реализации вашей платформы. Также обратите внимание (в perldoc perlipc), что Perl использует отложенные сигналы начиная с 5.8.x, поэтому установка будильника вручную может не сработать без использования обходного пути sigprocmask.

Здесь есть дополнительная информация: Тайм-аут SIGALRM - Как это влияет на существующие операции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...