繁体   English   中英

LWP getstore使用

[英]LWP getstore usage

我对Perl很陌生。 虽然我刚刚创建了一个简单的脚本来使用getstore($url, $file);检索getstore($url, $file); 但是我怎么知道任务是正确完成的还是中间的连接中断,身份验证失败或任何响应。 我搜索了所有的网络,发现一些内容,例如响应列表 ,以及一些有关useragent的东西,我完全听不懂,尤其是运算符$ua->
我希望对这些运算符(我什至不知道->用于什么),RC代码含义以及最后如何使用它进行解释。
它有很多东西,所以我很感谢给出的任何答案,甚至只是部分答案。 而且,首先感谢您能提供帮助的人。 =)

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);

会使用@args$object上调用该method 我们还可以在类名上调用方法。 要创建一个新对象,通常在类名上使用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我们感兴趣的URL:

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 ,请阅读文档 要了解对象,请阅读perlootut 您也可以访问SO上的perl标记以获取一些建议书。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM