使用 LWP::UserAgent 但不使用 WWW::Mechanize 时出现 403 错误
403 error when using LWP::UserAgent but not with WWW::Mechanize
我正在尝试使用 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");
没有记录 agent_alias
参数,LWP::UserAgent 和 WWW::Mechanize 都没有。而且也没有 agent_alias
参数实现。相反, 参数在两种情况下都被忽略 并且它 使用内置默认值 。但是 默认值不同 。尽管 WWW::Mechanize 有一个 agent_alias
方法 。来自 the documentation:
...For instance,
$mech->agent_alias( 'Windows IE 6' );
sets your User-Agent to
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
根据 documentation of LWP::UserAgent,您实际想要使用的参数被正确地称为 agent
,默认为 libwww-perl/#.###
(#.###
是版本号)。使用 WWW::Mechanize 可以使用相同的参数,但记录的不同默认值是 WWW-Mechanize/#.##
.
我正在尝试使用 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");
没有记录 agent_alias
参数,LWP::UserAgent 和 WWW::Mechanize 都没有。而且也没有 agent_alias
参数实现。相反, 参数在两种情况下都被忽略 并且它 使用内置默认值 。但是 默认值不同 。尽管 WWW::Mechanize 有一个 agent_alias
方法 。来自 the documentation:
...For instance,
$mech->agent_alias( 'Windows IE 6' );
sets your User-Agent to
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
根据 documentation of LWP::UserAgent,您实际想要使用的参数被正确地称为 agent
,默认为 libwww-perl/#.###
(#.###
是版本号)。使用 WWW::Mechanize 可以使用相同的参数,但记录的不同默认值是 WWW-Mechanize/#.##
.