使用LWP :: UserAgent时403错误,但不使用WWW :: Mechanize

时间:2016-11-26 12:19:18

标签: perl http-status-code-403 www-mechanize lwp-useragent

我正在尝试使用Perl5和LWP :: UserAgent访问网站。但是在连接时,脚本会以“拒绝访问”和“#34;信息。奇怪的是,它使用WWW :: Mechanize完美无缺,但获取代码完全相同。 通常情况下,我怀疑用户代理是原因,但正如前面提到的那样,代码在两种情况下都是相同的。

WWW :: Mechanize和LWP :: UserAgent如何处理可能导致此问题的请求有什么不同?

以下是一些演示两种不同方法的示例代码。

# Mechanize
use strict;
use warnings "all";
use WWW::Mechanize;

my $mech = WWW::Mechanize->new(
    agent_alias => 'Mozilla/5.0',
    show_progress => 1);

my $mech->get("www.foo.com");

# LWP
use strict;
use warnings "all";
use LWP::UserAgent;

my $ua = LWP::UserAgent->new(
    agent_alias => 'Mozilla/5.0',
    show_progress => 1);

my $r = $ua->get("www.foo.com");

1 个答案:

答案 0 :(得分:2)

没有记录agent_alias参数,LWP :: UserAgent和WWW :: Mechanize都没有。而且也没有agent_alias参数实现。相反,参数在两种情况下都会被忽略使用内置的默认。但默认值不同。对于WWW :: Mechanize,有一个$mech->agent_alias( 'Windows IE 6' ); 方法。来自the documentation

  

......例如,

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
     

将您的用户代理设置为

agent

根据documentation of LWP::UserAgent您实际想要使用的参数被正确地称为libwww-perl/#.###,默认为#.###WWW-Mechanize/#.##是版本号)。使用WWW :: Mechanize可以使用相同的参数,但记录的不同默认值为{{1}}。