我正在尝试使用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");
答案 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}}。