【问题标题】:can't retrieve content of a webpage with perl's LWP agent无法使用 perl 的 LWP 代理检索网页内容
【发布时间】:2011-10-20 20:56:26
【问题描述】:

我有一个程序可以检索特定网页的内容,但有些页面出现错误:

Can't get http://www.sitename.com
302 Moved Temporarily at geturl.pl line 30.

该网站在浏览器上显示良好。

想知道我可以做些什么来获取内容?

我的代码非常简单,标准使用 LWP 并且在大多数页面上都可以正常工作。

  my $browser = LWP::UserAgent->new(
    agent=>'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)',
    keep_alive=>'1'
  );
  ...
  my $response = $browser->get($url);

谢谢!

=================

更新:

  1. 是的,这是我正在使用的实际代码。是否有明确的选项可以开启以下功能 重定向?
  2. 是的 wget 工作

谢谢

【问题讨论】:

  • 这是您使用的实际代码吗? LWP::UserAgent 的默认配置自动遵循 302 重定向。
  • 它是否在命令行下工作,使用 wget 或 curl?浏览器(哪个?)有时不仅仅是发送 GET。

标签: perl lwp


【解决方案1】:

LWP::UserAgent 文档表明用户代理上的request 方法将自动跟随重定向。如果get 使用相同的逻辑,此文档尚不清楚。

您可以通过创建HTTP::Request 对象来使用请求方法。本示例使用request 方法:

perl -MData::Dumper -MHTTP::Request -MLWP -e '
  $request=HTTP::Request->new(GET => "http://www.google.com");
  $ua=LWP::UserAgent->new;
  print Dumper $ua->request($request);'

【讨论】:

    【解决方案2】:

    我刚刚阅读了a talk about some of various modules that can do HTTP in Perl 的幻灯片;也许你可以试试其他的,比如HTTP::Tiny:

    perl -MHTTP::Tiny -E '$res=HTTP::Tiny->new->get("http://www.sitename.com/"); say join "\n", map { $res->{$_} } (qw(response status reason content))'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      相关资源
      最近更新 更多