【问题标题】:How to set User-Agent with LWP?如何使用 LWP 设置用户代理?
【发布时间】:2015-05-28 21:23:28
【问题描述】:

我有 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,有什么建议吗?

【问题讨论】:

  • 你已经得到了一个很好的答案,但我怀疑你真正想要使用/学习的是WWW::Mechanize,它是 LWP::UA 的一个表现良好的子类,具有更多的自动化功能和变得直观/简单。

标签: perl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我很欣赏 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 覆盖和更新的代理打印行。

    对感兴趣的人的奖励材料:HTTP 基本身份验证提供了 get_basic_credentials 覆盖,这是大多数人找到子类化解决方案的方式。 _方法是神圣的什么的;但它确实抓痒不是吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多