• ベストアンサー

perlのLWPがページによって、正常に作動しません?

下記コードを書いたのですが、ページのソースを取得することができません。 どのように変えれば、取得することができますでしょうか? 因みに、URL部分を、 http://www.amazon.co.jp/gp/product/B000H9I0F6 とした場合は正常に取得できました。 お分かりになる方、何卒、宜しくお願い致します。 #!/usr/bin/perl print "Content-Type: text/plain\n\n"; use LWP; use HTTP::Cookies; $url="http://www.amazon.co.jp/gp/product/B000GPEXX4"; $file="cookies.txt"; $browser = LWP::UserAgent->new; $browser->cookie_jar({file =>$file, autosave=>1 }); $response = $browser->get($url); print $response->{_content}; exit;

  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

両方のURIを試してみましたが、私の場合どちらでも取得できました。 ので何故できないのかわからないのですが、以下のことを試すと原因がわかるかもしれません。一般的な話になっていますが… ・use strict; を入れる。 ・use warnings; を入れる。 ・エラーハンドリングをする。例えば$browser->get($url)をしたあとのコードを以下の様にする。 if ($response->is_error) { print $response->error_as_HTML; } else { print $response->content; }

mai_540903
質問者

お礼

回答いただきありがとうございます。 本日、同一のプログラムで動作をしたところ、取得できました。 また、原因追求の方法教えていただき、ありがとうございます!!

関連するQ&A

  • [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----------------------------------------------------

    • ベストアンサー
    • CGI
  • LWP Cookie取得

    恐れ入ります。 LWPで、特定サイトにアクセスした時に発行されるCookieを任意のディレクトリに保存したいのですが、どのようにしたらよいかわかりません。 use HTTP::Cookies; use LWP::UserAgent; $ua = LWP::UserAgent->new(); $cookie_file = './cookie/xxx.txt'; $cookie_jar = HTTP::Cookies->new(file => $cookie_file, autosave => 1); $url = "http://~~"; $response = $ua->get($url); print $response->content; で、コンテンツは表示されますが、xxx.txtにcookieが保存されません。 #LWP-Cookies-1.0 のみが記載された白紙のxxx.txtが精製されます。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • LWPでヘッダー情報をあらかじめ取得したい

    例えば、下記のようなスクリプトの場合、一度画像が保存された後、ファイルサイズをを抜き出すようになります。 ダウンロード前に、ファイルサイズをあらかじめ知りたいのですがどのようにしたら良いでしょうか? use strict; my $url = "http://img.www.goo.ne.jp/img/gh_logo.png"; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request; use HTTP::Headers; my $req = HTTP::Request->new(GET => $url); my $ua = LWP::UserAgent->new; $ua->agent( 'Mozilla/5.0 (Windows NT 6.0; rv:12.0)' ); $ua->timeout('10'); $ua->max_redirect(); $ua->cookie_jar( HTTP::Cookies->new( file => '', autosave => 1, )); my $res = $ua->request($req, "save.png"); my $file_size = $res->header("content-length"); print $file_size;

    • ベストアンサー
    • Perl
  • LWPによるページ取得の問題

    すいません、アホです。いろいろ調べましたが、まったくみつかりませんでした。この質問をすることは初歩すぎて失礼かとおもいますが、堪忍してくださいませ。 LWPで相互リンクをされているかどうかをCGIファイルの登録ページ後に判断したいプログラムですが、同じCGIファイル内に登録ページがありまして、<INPUT size=30 name=url>のように相手リンクを登録した自分のHTMLを書いてsubmitさせて、 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } で、取り出し、$FORM{'url'}まできます。URLがちゃんと$FORM{'url'}に入っているのは画面で確認できるのですが、下記のように指定した場合、相手HTMLを取得できません。エラーメッセージはでないで、真っ白い画面がでます。 $url = $FORM{'url'}; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; 下記はちゃんとうつります。 $url = 'http://www.yahoo.co.jp'; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; これは$FORM{'url'}のエンコードの問題なのでしょうか? まことに申し訳ありませんが、その方法をできれば具体的にお教えくださいませ。 何卒、宜しく御願いいたします。m_ _ m

  • perl で 画像を取得したい

    下記perlのコードを書いたのですが、なぜか、画像を取得することができません。 メモ帳で開くと、画像データっぽい文字列はあるのですが、普通に見ることができません。 なぜでしょうか?また、どのように改良すれば取得できますか? ご存知の方教えていただけないでしょうか? 宜しくお願い致します。 $source = &GetImg('http://www.goo.ne.jp/img/logo/gootop_logo.gif'); $FileOut = "tmp.gif"; open(OUT, ">$FileOut"); print OUT $source; close (OUT); sub GetImg() { my($url) = @_; use LWP::UserAgent; my $browser = LWP::UserAgent->new; my $response = $browser->get($url,'User-Agent' => 'Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007'); my $img_file = $response->content; return $img_file; }

    • ベストアンサー
    • Perl
  • Perl LWPでproxyがうまく刺さらない

    Perl初心者です。 LWPでどうしてもproxyが通りません・・・。 何が悪いのかわかりません。教えてください。 モジュールは全て導入を確認しました。 よろしくお願いします。 稚拙なミスだったらごめんなさい。 use LWP::Simple; use LWP::UserAgent; use HTTP::Request::Common; my $ua = LWP::UserAgent->new( timeout=>"5" ); #cybersyndromeさんからLWP::Simpleでproxyを取得 $_ = get('http://www.cybersyndrome.net/pla5.html'); #proxyをリストに代入 (@proxy_list)=/\"\>(.*?)\<\/a\>\<\/li\>\<li\>/g; #適当なサイトをリクエストのターゲットに $r = new HTTP::Request GET,('http://taruo.net/e/'); #前述のターゲットへリクエストしてひとつづつproxyが通るか確かめたいのに何故かすべてすぐにERRORに for($i = 0;$i <= 10;$i++){ $proxy = 'http://'.$proxy_list[$i]; $ua->proxy ([qw(http https)] , $proxy); $req = $ua->request($r); if ($req->is_success) { print "Success!\n"; }else{ print "Error\n"; } }

    • ベストアンサー
    • Perl
  • Perl HTMLソースから特定のタグ抽出

    use LWP::UserAgent; use HTTP::Request; use HTTP::Response; our $URL = 'https://www.yahoo.co.jp/'; # アクセスする URL my $proxy = new LWP::UserAgent; $proxy->agent('your own created browser name here'); # 任意 $proxy->timeout(60); # 任意 my $req = HTTP::Request->new('GET' => $URL); my $res = $proxy->request($req); my $content = $res->content; print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる) if($res->is_success) { print $content; } else { print 'HTTP エラーコード: ' . $res->code; } これで、HTMLソース全てを取得することはできましたが、 例えば、このソースはヤフーのコードを取得していますが、 ヤフーのコード内で<li></li> リストタグないの文字列がほしいのですが、 どのように抽出すればいいのでしょうか? ヤフーでは、下記のようになっていて <li><a hrf="???????????????">ここの文字列<span>写真</span><span>new</span></li> このソースからここの文字列を抽出させたいです。 さらに、1番目の<li>内、4番目の<li>内といったことも実行したいです。 どうかご教示お願い致します。

  • Perl LWPでのIPv6エラー

    Perl LWPでのIPv6接続がエラーでつながらず、原因がわかりません。 記載しているソースで、Localhostに接続すると、LWP::UserAgentはエラーとなりますが HTTP::Tiny、wgetコマンドは、問題ありません。(IPv4の場合は、LWPも問題ありません)。 どなたか、よい解決へのお知恵をよろしくお願いします。 perl 5.16.1 CentOS 5.9 ------ソース----- #!/usr/bin/perl use strict; use Net::INET6Glue; my $uri = 'http://[::1]'; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $res = $ua->get($uri); print $res->content,"\n"; print "********************************\n"; use HTTP::Tiny; my $http = HTTP::Tiny->new; my $response = $http->get($uri); print $response->{content}, "\n"; -----結果----- Can't connect to ::1:80 (接続を拒否されました) LWP::Protocol::http::Socket: connect: 接続を拒否されました at /usr/local/perl-5.16.2/lib/site_perl/5.16.2/LWP/Protocol/http.pm line 51. ******************************** <html><body><h1>It works!</h1></body></html> ---環境--- This is perl 5, version 16, subversion 2 (v5.16.2) built for x86_64-linux cpan[1]> i /INET6/ Reading '/root/.cpan/Metadata' Database was generated on Fri, 01 Mar 2013 03:17:03 GMT Distribution SHLOMIF/IO-Socket-INET6-2.69.tar.gz Distribution SULLR/Net-INET6Glue-0.5.tar.gz Module = IO::Socket::INET6 (SHLOMIF/IO-Socket-INET6-2.69.tar.gz) Module = Net::INET6Glue (SULLR/Net-INET6Glue-0.5.tar.gz) Module = Net::INET6Glue::FTP (SULLR/Net-INET6Glue-0.5.tar.gz) Module = Net::INET6Glue::INET_is_INET6 (SULLR/Net-INET6Glue-0.5.tar.gz) Module < Net::Patricia::AF_INET6 (PHILIPP/Net-Patricia-1.19.tar.gz) Module < Net::Whois::Object::Inet6Num (AASSAD/Net-Whois-RIPE-2.002.tar.gz) 8 items found

    • ベストアンサー
    • Perl
  • LWPを使用して、自アカウントのページの情報を取得したい。

    【実現したいこと】 ユーザIDとパスワードを入力する画面から マイアカウント専用のページの内容を取得したい。 【環境】 WindowsXP ActivePerl5.8.8 【疑問点】 ソースの最終行で以下のようにして decode('euc-jp',$response->content); 取得したドキュメントの内容を 吐いているつもりですが、 なぜ、はかれないのかが良くわかりません。 どなたか、間違いをご指摘ください。 (status_lineの結果が302なので うまくログインできてる気でいるのですが、 そもそも、正しくログインできているのかの 判断もどうすればよいのかわかっていません。) 【ソース】 #ユーザーIDとパスワードを送信して、マイページの情報を取得する。 my $agent = LWP::UserAgent->new; my $uri = URI->new ('https://www.XXXXXXXXXXXXXX'); my $response = $agent->post( $uri, [ 'loginid' => 'XXXXX', 'password' => 'XXXXX', ], ); print "response:".$response."\n"; print "status_line:".$response->status_line."\n"; print "base:".$response->base."\n"; print "request:".$response->request."\n"; print "previous:".$response->previous."\n"; print "is_info:".$response->is_info."\n"; print "is_redirect:".$response->is_redirect."\n"; print decode('euc-jp',$response->content); 【結果】 response:HTTP::Response=HASH(0x2f8c353) status_line:302 Found base:https://www.XXXXXXXXXXXXXX request:HTTP::Request=HASH(0x2d032bc) previous: is_info: is_redirect:1 以上です。どなたか知恵をお貸しください。m(_ _)m

  • LWP::Simpleでのgetについて

    つい先日ローカルにサーバ環境をインストールし、 色々とプログラムを試しているのですが、 タイトルに記述したLWP::Simpleのgetを使用すると500エラーとなってしまいます 実行内容は下記のような単純なものです use LWP::Simple; $url = "http://localhost/test.cgi";#自動リンク防止に「:」を全角にしてます $html = get($url); print "Content-Type: text/html\n\n"; print $html; ・test.cgi単体では動作しています(単純に文字を出力するのみ) ・$url をローカルでなく外部URL(例 yahoo等)にしてもエラーとなりました ・getを行わなず $html = "a";のように任意文字列にした場合は出力されます ・perl/lib/LWP/ には Simple.pm が入っています ・use 行をevalで囲み $@ を見てみましたがエラーは入っていませんでした ・セキュリティソフトがブロックしている可能性も考え、切ってみましたが駄目でした ・レンタルサーバー上で実行した場合は成功しました($urlを外部URLにて) こちらはApacheやOS側で他に何か設定等が必要なのでしょうか それとも不足しているものがあるのか・・・手詰まり状態です 些細なことで結構ですので、助言いただけると助かります 以上、よろしくお願いします ----------------------------------- Apache/2.2.4 Perl/v5.8.8 WinXP/HE サーバ環境はXAMPP及びXAMPP Add-Onsで一括インストール