我对Perl很新。虽然我刚刚创建了一个简单的脚本来检索文件
getstore($url, $file);
但是,我如何知道任务是否正确完成或者连接是否在中间中断,或者身份验证失败,或者是什么响应。我搜索了所有的网络,我找到了一些,比如a response list,还有一些人谈论有用的东西,我完全听不懂,特别是运营商$ua->
。
我希望是关于那个运算符的解释(我甚至不知道->
用于什么),RC代码含义,最后是如何使用它。
它有很多东西所以我很欣赏任何给出的答案,即使只是部分答案。并且,首先感谢任何愿意提供帮助的人。 =)
答案 0 :(得分:6)
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
$ua
包含所有HTTP请求的方法,例如get
和post
。要复制getstore
的行为,我们首先必须get
我们感兴趣的网址:
my $url = "http://www.example.com/";
my $response = $ua->get($url);
$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
,请阅读documentation。要了解对象,请阅读perlootut。您也可以访问SO上的perl tag获取一些图书建议。