1

我对 Perl 很陌生。虽然我刚刚创建了一个简单的脚本来检索文件 getstore($url, $file); 但是我怎么知道任务是否正确完成或中间连接中断,或身份验证失败,或任何响应。我搜索了所有的网络,我发现了一些,比如一个响应列表,还有一些在谈论用户代理的东西,我完全看不懂,尤其是 operator $ua->
我想要的是解释那个操作符的东西(我什至不知道->用来做什么),以及 RC 代码的含义,最后,如何使用它。
它有很多东西,所以我很欣赏给出的任何答案,即使只是部分答案。并且,首先感谢愿意提供帮助的人。=)

4

1 回答 1

7

LWP::Simple模块就是这样:非常简单。文档说明该getstore函数返回 HTTP 状态代码,我们可以将其保存到变量中。还有is_successis_error函数告诉我们某个返回值是否正常。

my $url      = "http://www.example.com/";
my $filename = "some-file.html";
my $rc = getstore($url, $filename)
if (is_error($rc)) {
  die "getstore of <$url> failed with $rc";
}

当然,这不会捕获文件系统的错误。

die抛出一个致命异常,终止脚本的执行并在终端上显示自身。如果您不想中止执行,请使用warn.

这些LWP::Simple功能为常见任务提供高级控制。如果您需要对请求进行更多控制,则必须手动创建一个LWP::UserAgent. 用户代理(缩写为ua)是一个类似浏览器的对象,可以向服务器发出请求。我们对这些请求有非常详细的控制,甚至可以修改确切的标头字段。

操作符是一个通用的->解引用操作符,当你需要复杂的数据结构时会经常用到它。它还用于面向对象编程中的方法调用:

$object->method(@args);

method用. $object_ @args我们也可以在类名上调用方法。要创建一个新对象,通常new在类名上使用该方法:

my $object = The::Class->new();

方法就像函数一样,只是你把它留给对象的类来确定究竟将调用哪个函数。

正常的工作流程LWP::UserAgent如下所示:

use LWP::UserAgent; # load the class

my $ua = LWP::UserAgent->new();

我们还可以为new方法提供命名参数。因为这些 UA 对象是机器人,所以告诉每个发送此 Bot 的人被认为是一种礼貌。我们可以使用该from字段这样做:

my $ua = LWP::UserAgent->new(
  from => 'ss-tangerine@example.com',
);

我们还可以更改timeout默认的三分钟。这些选项也可以我们构建一个新的之后设置$ua,所以我们可以这样做

$ua->timeout(30);  # half a minute

具有所有 HTTP 请求的$ua方法,例如getpost。要复制 的行为getstore,我们首先要访问get我们感兴趣的 URL:

my $url = "http://www.example.com/";

my $response = $ua->get($url);

the$response也是一个对象,我们可以问它是否is_success

$response->is_success or die $response->status_line;

因此,如果执行流过该语句,则一切正常。我们现在可以访问请求的内容。注意:使用该decoded_content方法,因为它为我们管理传输编码:

my $content = $response->decoded_content;

我们现在可以将其打印到文件中:

use autodie; # automatic error handling
open my $fh, ">", "some-file.html";
print {$fh} $content;

(在 Windows 上处理二进制文件时:binmode $fh打开文件后,或使用">:raw"打开模式)

完毕!

要了解相关信息LWP::UserAgent,请阅读文档。要了解对象,请阅读perlootut。您还可以访问 SO 上的perl 标签以获取一些书籍建议。

于 2013-08-04T12:00:39.397 回答