LWP::Simple でウィキペディアのページをフェッチできないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/24546

  •  09-06-2019
  •  | 
  •  

質問

を使用して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. 。以下の文書を読むことができます。変更する必要がある大きな違いはありません。

http://lwp.interglacial.com/ch12_02.htm

Wikipedia が LWP::Simple で使用される HTTP ユーザー エージェント文字列をブロックしているためです。

使用しようとすると、「403 Forbidden」という応答が返されます。

これを回避するには、LWP::UserAgent モジュールを試して、エージェント属性を設定してください。

Mediawiki 関連の CPAN モジュールも参照してください。これらは Mediawiki サイト (wikipedia もその 1 つ) にアクセスするように設計されており、単純な LWP よりも多くの追加機能を提供する可能性があります。

http://cpan.uwinnipeg.ca/search?query=Mediawiki&mode=dist

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top