Perl 为什么可以';我不能用LWP::Simple获取维基百科页面吗?
我正在尝试使用获取维基百科页面,但它们不会回来。此代码:Perl 为什么可以';我不能用LWP::Simple获取维基百科页面吗?,perl,wikipedia,lwp,Perl,Wikipedia,Lwp,我正在尝试使用获取维基百科页面,但它们不会回来。此代码: #!/usr/bin/perl use strict; use LWP::Simple; print get("http://en.wikipedia.org/wiki/Stack_overflow"); 没有打印任何东西。但是如果我使用其他网页,比如说,它就可以正常工作 我是否应该使用其他名称来指代维基百科页面 这到底是怎么回事?显然,维基百科阻止了LWP::简单请求: 相反,以下方法有效: #!/usr/bin/perl use
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
没有打印任何东西。但是如果我使用其他网页,比如说
,它就可以正常工作
我是否应该使用其他名称来指代维基百科页面
这到底是怎么回事?显然,维基百科阻止了LWP::简单请求: 相反,以下方法有效:
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
my $url = "http://en.wikipedia.org/wiki/Stack_overflow";
my $ua = LWP::UserAgent->new();
my $res = $ua->get($url);
print $res->content;
因为Wikipedia正在阻止LWP::Simple使用的HTTP用户代理字符串 如果您尝试使用它,您将得到“403禁止”-响应
尝试LWP::UserAgent模块来解决这个问题,设置代理属性。还可以查看Mediawiki相关的CPAN模块-这些模块旨在访问Mediawiki站点(wikipedia就是其中之一),可能比简单的LWP给您带来更多的惊喜
您也可以在LWP::Simple模块上设置UA—只需导入$UA变量,它将允许您修改底层UserAgent:
use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");
我用
LWP:RobotUA
而不是LWP::UserAgent
解决了这个问题。您可以阅读下面的文档。您应该修改的差异不大
注意,您收到了一个“403禁止”错误。我收到了错误500,无法连接到给定wiki URL的en.wikipedia.org:443,但是对于stackoverflow主页,它给出了403。我添加了
$ua->agent(“WikiBot/0.1”)
在调用get
方法之前,这对包括stackoverflow在内的许多站点都很有效。但它仍然在wiki页面上给出了错误,与上面提到的错误相同。添加了$ua=LWP::UserAgent->new(ssl\u opts=>{verify\u hostname=>0})代码>此错误500无法连接到en.wikipedia.org:443已修复。它可能会帮助其他人。