我有Perl& LWP书籍,但如何设置用户代理字符串?
这就是我所拥有的:
use LWP::UserAgent;
use LWP::Simple; # Used to download files
my $u = URI->new($url);
my $response_u = LWP::UserAgent->new->get($u);
die "Error: ", $response_u->status_line unless $response_u->is_success;
任何建议,如果我想像我这样使用LWP::UserAgent
那么?
答案 0 :(得分:10)
来自LWP cookbook:
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("$0/0.1 " . $ua->agent);
# $ua->agent("Mozilla/8.0") # pretend we are very capable browser
$req = new HTTP::Request 'GET' => 'http://www.sn.no/libwww-perl';
$req->header('Accept' => 'text/html');
# send request
$res = $ua->request($req);
答案 1 :(得分:1)
我非常感谢LWP cookbook解决方案,该解决方案提到了子类化解决方案,并且传递了对lwp-request的引用。
一位聪明的perl和尚曾说过:the ole subclassing LWP::UserAgent trick
package AgentP;
use base 'LWP::UserAgent';
sub _agent { "Mozilla/8.0" }
sub get_basic_credentials {
return 'admin', 'password';
}
package main;
use AgentP;
my $agent = AgentP->new;
my $response = $agent->get( 'http://127.0.0.1/hideout.html' );
print $agent->agent();
该条目已经修改了一些不好的幽默,使用声明,_agent覆盖和更新的代理打印行。
感兴趣的奖励材料:随get_basic_credentials覆盖提供的HTTP基本身份验证,这是大多数人来寻找子类化解决方案的方式。 _方法是神圣的或某种东西;但它确实刮伤了痒不是吗?