为啥我不能使用 LWP::Simple 获取***页面?
Posted
技术标签:
【中文标题】为啥我不能使用 LWP::Simple 获取***页面?【英文标题】:Why can't I fetch wikipedia pages with LWP::Simple?为什么我不能使用 LWP::Simple 获取***页面? 【发布时间】:2010-09-06 16:13:12 【问题描述】:我正在尝试使用LWP::Simple 获取***页面,但它们没有回来。这段代码:
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
不打印任何东西。但如果我使用其他网页,比如@987654322@
,它可以正常工作。
我应该使用其他名称来引用***页面吗?
这里会发生什么?
【问题讨论】:
请注意,您会收到“403 Forbidden”错误。 【参考方案1】:显然 Wikipedia 阻止了 LWP::Simple 请求:http://www.perlmonks.org/?node_id=695886
以下方法可以代替:
#!/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;
【讨论】:
我收到错误 500 Can't connect to en.wikipedia.org:443 对于给定的 wiki URL,但是对于 *** 主页 ***.com,它给出 403 . 我在调用get
方法之前添加了$ua->agent("WikiBot/0.1");
,这对包括*** 在内的许多网站都很有效。但它仍然在 wiki 页面上给出错误,与上述相同的错误。
添加了$ua = LWP::UserAgent->new(ssl_opts => verify_hostname => 0 );
,这个错误500 Can't connect to en.wikipedia.org:443得到了修复。它可能对其他人有帮助。【参考方案2】:
您也可以只在 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");
【讨论】:
【参考方案3】:我使用LWP:RobotUA
而不是LWP::UserAgent
解决了这个问题。您可以阅读下面的文档。您应该修改的差异不大。
http://lwp.interglacial.com/ch12_02.htm
【讨论】:
【参考方案4】:因为 Wikipedia 阻止了 LWP::Simple 使用的 HTTP 用户代理字符串。
如果您尝试使用它,您将收到“403 Forbidden”响应。
尝试使用 LWP::UserAgent 模块解决此问题,设置代理属性。
【讨论】:
【参考方案5】:另请参阅与 Mediawiki 相关的 CPAN 模块 - 这些模块旨在访问 Mediawiki 网站(***就是其中之一),并且可能比简单的 LWP 为您提供更多的花里胡哨。
http://cpan.uwinnipeg.ca/search?query=Mediawiki&mode=dist
【讨论】:
以上是关于为啥我不能使用 LWP::Simple 获取***页面?的主要内容,如果未能解决你的问题,请参考以下文章
Perl LWP::Simple::getstore 如何检查文件是不是存在于目标目录中
为啥我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制]
为啥我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制]