LWP getstore使用情况

时间:2013-08-04 10:28:28

标签: perl lwp

我对Perl很新。虽然我刚刚创建了一个简单的脚本来检索文件 getstore($url, $file); 但是,我如何知道任务是否正确完成或者连接是否在中间中断,或者身份验证失败,或者是什么响应。我搜索了所有的网络,我找到了一些,比如a response list,还有一些人谈论有用的东西,我完全听不懂,特别是运营商$ua->
我希望是关于那个运算符的解释(我甚至不知道->用于什么),RC代码含义,最后是如何使用它。
它有很多东西所以我很欣赏任何给出的答案,即使只是部分答案。并且,首先感谢任何愿意提供帮助的人。 =)

1 个答案:

答案 0 :(得分:6)

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

$ua包含所有HTTP请求的方法,例如getpost。要复制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获取一些图书建议。