• ベストアンサー

[PERL-CGI] LWPを使った際リダイレクトされたか否かを知る方法について

下記のように、任意のホームページを取得してそれを出力するプログラムがあるのですが、リダイレクトで引越しされたホームページにアクセスしても、特に問題なく表示されます。 できれば、リダイレクトされた場合であれば、次から本当のURLにアクセスしたいためそのホームページを記録したいのですが何か良い方法は無いでしょうか? ご存知の方、教えていただけ無いでしょうか? 宜しくお願い致します。 -CGI---------------------------------------------------- #!/usr/bin/perl print "Content-Type: text/plain\n\n"; $url = 'http://URLを入れる'; use LWP; use HTTP::Cookies; $file = "cookies.txt"; $browser = LWP::UserAgent->new; $browser->cookie_jar({file =>$file, autosave=>1 }); $response = $browser->get($url); print $response->{_content}; __END__ if(リダイレクトされたならば){ open (OUT,">>RedirectLog.txt"); print OUT $url."\n"; close(OUT); } -CGI----------------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.2

リダイレクトされていたらリダイレクト禁止にして改めてurlを取り出すとか if($response->previous()){ #リダイレクトされたならば $browser->requests_redirectable([]); $browser->get($url)->content()=~/<a href=[\"\']?([^\"\']+)[\"\']?>/i; open (OUT,">>RedirectLog.txt"); print OUT $1."\n"; close(OUT); } #ちょっと処理的にアレな感じですがとりあえず動きました

ayu_mi_nic
質問者

お礼

とりあえず、動くものがあり、とても、助かりました!! ありがとうございます!

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

http://digit.que.ne.jp/work/index.cgi?Perl%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%2FLWP#i7 が参考になるかも 実際に試してないのでわかりませんが、 LWPそのままだと透過的にリダイレクトするとあるので LWP::UserAgent の simple_requestでリクエストを出して レスポンス(HTTP::Response)から is_redirect でリダイレクトされたかどうかとheader('Location')でURLが取り出せるのではないかと思います。

ayu_mi_nic
質問者

お礼

とてもよくまとめられているページで様々な変更に役立ちました。ありがとうございました。

関連するQ&A