如何使用LWP设置User-Agent?

时间:2011-06-03 20:47:34

标签: perl

我有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那么?

2 个答案:

答案 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基本身份验证,这是大多数人来寻找子类化解决方案的方式。 _方法是神圣的或某种东西;但它确实刮伤了痒不是吗?