Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 403使用LWP::UserAgent但不与WWW::Mechanize一起使用时出错_Perl_Http Status Code 403_Www Mechanize_Lwp Useragent - Fatal编程技术网

Perl 403使用LWP::UserAgent但不与WWW::Mechanize一起使用时出错

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

我正在尝试使用Perl5和LWP::UserAgent访问一个站点。但是,在连接时,脚本将随着“403访问被拒绝”消息而终止。奇怪的是,它使用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");

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
。这必须是一个硬编码的排除,而不是一个非常有效的!通过查看我以前的脚本,我似乎在过去使用过“代理”,但在某个时候,出于未知的原因,我切换到了代理别名。一个非常拙劣的错误。为这个错误道歉。