- - PR -
Perl(LWP::Simple)によるページ取得について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-12-19 19:16
LWP::Simpleでページを取得したいのですが
例えば ヤフーの場合 $html = get("http://www.yahoo.co.jp/"); で取得することができました。 WiKiの場合 $html = get("http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E3%83%89%E3%82%A2"); としても取得することができませんでした。 おそらくURLの問題だとは思うのですが、いろいろとやってみたのですが どうしても取得することができませんでした。 どのような理由で取得できないのでしょうか。 |
|
投稿日時: 2006-12-22 17:10
use LWP::Simple;
getprint("http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E3%83%89%E3%82%A2"); getprintでレスポンスコードが取れるらしく やってみました。 403 Forbidden <URL:http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E3%83%89%E3%82%A2> アクセス権が無いっていわれちゃいます。 ブラウザでは普通にみえますし、wgetでも取れますね・・・。 LWP::UserAgentつかってみました。 use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(GET => 'http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E3%83%89%E3%82%A2'); my $res = $ua->request($req); if ($res->is_success) { print "ok"; }else{ print $res->status_line . "\n"; } 問題なくとれました。 |
|
投稿日時: 2006-12-29 10:29
お返事がおそくなり申し訳ございません。
ありがとうございます! 取得することができました。 ひとまずwgetを使いたいと思います。 wgetを試しておけば簡単なお話でした・・・ |
|
投稿日時: 2006-12-29 14:43
こんにちは
取得に失敗する理由ですが、パケットキャプチャして色々ためした結果、 「User-Agent リクエストヘッダがない、または lwp で始まるエージェント」 を Wikipedia はアクセス拒否しているみたいです。 ("lwp" を含んでいても、先頭が lwp でなければよさそうです) LWP::Simple で HTTP GET する際、User-Agent リクエストヘッダは 自動で "lwp-trivial/xxx" とバージョン番号が付加されるので、 LWP::Simple モジュールのソースを改造しないと難しいかもですね。 LWP/Simple.pm の User-Agent をセットしている箇所を 適当にいじって実行すると、期待する動作になりました。 // LWP で DoS 攻撃でもされた経緯でもあるんでしょうかね…… |
1