LWP::Simple でウィキペディアのページをフェッチできないのはなぜですか?
質問
を使用してWikipediaのページを取得しようとしています LWP::シンプル, 、しかし彼らは戻ってきません。このコード:
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
何も印刷されません。しかし、他の Web ページを使用すると、次のようになります。 http://www.google.com
, 、正常に動作します。
ウィキペディアのページを参照するために使用すべき他の名前はありますか?
ここで何が起こっているのでしょうか?
解決
どうやら 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;
他のヒント
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
. 。以下の文書を読むことができます。変更する必要がある大きな違いはありません。
Wikipedia が LWP::Simple で使用される HTTP ユーザー エージェント文字列をブロックしているためです。
使用しようとすると、「403 Forbidden」という応答が返されます。
これを回避するには、LWP::UserAgent モジュールを試して、エージェント属性を設定してください。
Mediawiki 関連の CPAN モジュールも参照してください。これらは Mediawiki サイト (wikipedia もその 1 つ) にアクセスするように設計されており、単純な LWP よりも多くの追加機能を提供する可能性があります。