Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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 为什么可以';我不能用LWP::Simple获取维基百科页面吗?_Perl_Wikipedia_Lwp - Fatal编程技术网

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已修复。它可能会帮助其他人。