perl - 有效处理 lwp 超时

标签 perl timeout lwp lwp-useragent

我正在使用 LWP 从网页下载内容,我想限制它等待页面的时间。这是在 lwp 中完成的,如下所示:

my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->get($url);

这工作正常,除了每当超时达到其限制时,它就会死掉,我无法继续使用脚本!我真的很想正确处理这个超时,以便我可以记录 url 有超时,然后继续我的下一个。有谁知道如何做到这一点?谢谢!

最佳答案

LWP::Agentget()返回 HTTP::Response可用于检查错误的对象:

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) {
        ...
    }
}

顺便说一句,现在更好的做法是使用 Try::Tiny而不是 eval {...} .它给你 try {...} catch {...} .它解决了检查 if $@ 的一些问题(请参阅 Try::Tiny 文档中的背景部分)。

关于perl - 有效处理 lwp 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989783/

相关文章:

perl 在不复制的情况下获取函数返回的临时列表的引用?

c# - 返回非常大的字符串时 .asmx 请求超时

php - 如何在 PHP IPC::Open3 中像 PERL 那样做?

perl - Perl 变量声明的正确方法

用于解析测试输出并仅打印失败案例的正则表达式

jquery - 如何让 ng-click 函数等待 jQuery 脚本完成后再执行?

Python,Popen 和 select - 等待进程终止或超时

perl - 在 Ubuntu 12.04 上为 Perl 5.14.2 LWP 安装新的 ca 证书

perl - 如果无法直接替换应用程序代码中的 $ua,如何使用 Test::LWP::UserAgent?

perl 500 证书验证失败