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