Perl 403使用LWP::UserAgent但不与WWW::Mechanize一起使用时出错
我正在尝试使用Perl5和LWP::UserAgent访问一个站点。但是,在连接时,脚本将随着“403访问被拒绝”消息而终止。奇怪的是,它使用WWW::Mechanize可以完美地工作,但获取代码却完全相同。 通常我会怀疑用户代理是原因,但正如前面提到的,这两种情况下的代码是相同的 WWW::Mechanize和LWP::UserAgent处理可能导致此问题的请求的方式是否存在差异 下面是一些示例代码,演示了两种不同的方法Perl 403使用LWP::UserAgent但不与WWW::Mechanize一起使用时出错,perl,http-status-code-403,www-mechanize,lwp-useragent,Perl,Http Status Code 403,Www Mechanize,Lwp Useragent,我正在尝试使用Perl5和LWP::UserAgent访问一个站点。但是,在连接时,脚本将随着“403访问被拒绝”消息而终止。奇怪的是,它使用WWW::Mechanize可以完美地工作,但获取代码却完全相同。 通常我会怀疑用户代理是原因,但正如前面提到的,这两种情况下的代码是相同的 WWW::Mechanize和LWP::UserAgent处理可能导致此问题的请求的方式是否存在差异 下面是一些示例代码,演示了两种不同的方法 # Mechanize use strict; use warnings
# 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");
LWP::UserAgent和WWW::Mechanize均未记录任何
agent\u别名
参数。而且也没有代理别名
参数实现。相反,参数在这两种情况下都会被忽略,并使用内置默认值。但默认情况不同。虽然WWW::Mechanize有一个agent\u别名
方法。发件人:
…例如
$mech->agent_alias( 'Windows IE 6' );
将用户代理设置为
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
根据这个例子,您实际想要使用的参数被正确地称为
agent
,默认为libwww-perl/###############
作为版本号)。对于WWW::Mechanize,可以使用相同的参数,但记录的不同默认值是WWW Mechanize/#.#
,最好说new
的正确参数被称为agent
,您应该说出默认的用户代理字符串是什么are@Borodin你说得对。我已将此信息添加到我的答案中。谢谢。似乎奇怪的是,一个站点会返回禁止的libwww-perl
,而不是WWW-Mechanize
。这必须是一个硬编码的排除,而不是一个非常有效的!通过查看我以前的脚本,我似乎在过去使用过“代理”,但在某个时候,出于未知的原因,我切换到了代理别名。一个非常拙劣的错误。为这个错误道歉。