我使用的LWP下载从网页上的内容,我想限制的时间等待一个页面的数量。 这是在这样的LWP来实现:
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->get($url);
而这个工作正常,但每当超时达到其极限时,它只是死了,我无法继续与脚本! 我真的很想妥善处理这一超时,这样我可以记录该URL有超时,然后转移到我的下一个。 有谁知道如何做到这一点? 谢谢!
我使用的LWP下载从网页上的内容,我想限制的时间等待一个页面的数量。 这是在这样的LWP来实现:
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->get($url);
而这个工作正常,但每当超时达到其极限时,它只是死了,我无法继续与脚本! 我真的很想妥善处理这一超时,这样我可以记录该URL有超时,然后转移到我的下一个。 有谁知道如何做到这一点? 谢谢!
LWP ::代理的get()
返回一个HTTP响应::您可以用于检查错误的对象:
use LWP::Agent;
use HTTP::Status ();
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
my $response = $ua->get($url);
if ($response->is_error) {
printf "[%d] %s\n", $response->code, $response->message;
# record the timeout
if ($response->code == HTTP::Status::HTTP_REQUEST_TIMEOUT) {
...
}
}
顺便说一句,在更好的做法是时下使用尝试::微小代替eval {...}
它可以让你try {...} catch {...}
它解决了与检查的一些问题if $@
(见背景部分Try::Tiny
文档)。
你可以使用eval块一个尝试{}赶上{}在Perl相当于:
http://perldoc.perl.org/functions/eval.html
在大多数情况下,LWP :: UserAgent的的超时时间是足够的,但它确实一些缺点...它适用于每个系统调用,而不是他们的总和。 如果你真的需要一个固定的超时时间,这是说的事情之一LWPx :: ParanoidAgent照顾了。