我对 Perl 很陌生。虽然我刚刚创建了一个简单的脚本来检索文件
getstore($url, $file);
但是我怎么知道任务是否正确完成或中间连接中断,或身份验证失败,或任何响应。我搜索了所有的网络,我发现了一些,比如一个响应列表,还有一些在谈论用户代理的东西,我完全看不懂,尤其是 operator $ua->
。
我想要的是解释那个操作符的东西(我什至不知道->
用来做什么),以及 RC 代码的含义,最后,如何使用它。
它有很多东西,所以我很欣赏给出的任何答案,即使只是部分答案。并且,首先感谢愿意提供帮助的人。=)
1 回答
该LWP::Simple
模块就是这样:非常简单。文档说明该getstore
函数返回 HTTP 状态代码,我们可以将其保存到变量中。还有is_success
和is_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
方法,例如get
和post
。要复制 的行为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 标签以获取一些书籍建议。