LWPについて - Perl,CGI初心者のためのHTML取得プログラム作成

このQ&Aのポイント
  • Perl, CGI初心者のためのLWP(Library for WWW in Perl)を使用したHTML取得プログラム作成についての質問です。コマンドプロンプトでの実行結果は正常ですが、ブラウザ経由でのアクセス時にデータが取得できない問題が発生しています。原因やApacheの設定についてご教示いただけますでしょうか。
  • LWP(Library for WWW in Perl)を使用してWeb上のHTMLを取得し、特定の部分を出力するCGIプログラムを作成中ですが、ブラウザ経由でのアクセス時にデータが取得できません。コマンドプロンプトでは正常に動作しているため、何か設定が必要なのか疑問です。原因や解決策についてご教示いただけないでしょうか。
  • PerlとCGIの初心者です。LWP(Library for WWW in Perl)を使用してWeb上のHTMLを取得し、CGIプログラムで特定の部分を出力するプログラムを作成中です。しかし、ブラウザ経由でのアクセス時にデータが取得できません。コマンドプロンプトでの動作は正常です。なぜデータが取得できないのか、原因と対策方法を教えてください。
回答を見る
  • ベストアンサー

LWPについて

Perl,CGI初心者です。 LWPのUserAgent(もしくはSimple)を使ってWeb上のHTMLをGETして、そのHTMLの特定の部分を 出力するCGIプログラムを作成しています。 コマンドプロンプトで<perl "cgiプログラム>とすると想定通りの結果が得られるにも かかわらず、いざブラウザ経由で当該cgiにアクセスしようとすると、エラーにはなりま せんが、データがGETできていません。 何か原因は考えられるでしょうか? LWPを使用する際はApache側にも何か設定が必要なのでしょうか? Webサーバ:Windows XP,Apache2.2,Perl5.8.8

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

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

  • ベストアンサー
  • teapots08
  • ベストアンサー率52% (32/61)
回答No.1

本文を出力する前に、 print "Content-type: text/html\n\n"; とかは出力してありますか? http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj01.htm

rx_78_2
質問者

お礼

自己解決しました。 proxyの設定がうまくいってませんでした。 回答ありがとうございます。

rx_78_2
質問者

補足

回答ありがとうございます。 >print "Content-type: text/html\n\n"; >とかは出力してありますか? 上記は記載されています。 以下がコードになります。 簡易化したものですが、本コードでも同様の現象になります。 -------sample.cgi----------------------------------- #!d:/perl/bin/perl $URL="http://www.yahoo.co.jp/"; use LWP::Simple; $html=get ($URL); print <<EOF; Content-Type: text/html; charset=Shift_JIS\n\n $html EOF ---------------------------------------------------- コマンドプロンプトからd:/perl/bin/perl sample.cgiとすると HTMLが出力されますが、ブラウザ経由でアクセスすると何も 表示されません。

関連するQ&A

  • 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で一括インストール

  • Perlで言う、LWP HTTPをPHPで

    PerlでのスクリプトをPHPに移行しようかと考えております。(勉強のため) それで、PerlのモジュールでいうLWPとHTTPに代わるクラスライブラリ(API)は、どれにあたるのでしょうか? 具体的には、LWP::UserAgentとHTTP::Requestです。 ※詳しくは、 my $wa = new LWP::UserAgent; my $req = new HTTP::Request(GET => $url); my $res = $wa->request($req); PHPのドキュメント(http://www.php.net/manual/ja/)を見たのですが、いまいちピンときませんでした。 参考URLで結構ですので、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 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
  • LWPでPOST送信した後に送信先に移動したい

    LWPで別サーバーのtest.cgiに以下のようなコードで POST送信しています。 use HTTP::Request::Common; use LWP::UserAgent; $query="param1=dummy"; $ua = LWP::UserAgent->new(); $req = HTTP::Request->new(POST => "http://xxx.xxx.xxx/test.cgi"); $req -> content_type('application/x-www-form-urlencoded'); $req -> content($query); $res = $ua->request($req); $success = $res -> is_success; if(!$success){ die("error"); } $con = $res -> content; この場合、$conにtest.cgiの出力が入るだけで、 URLのhttp://xxx.xxx.xxx/test.cgiに遷移することはできません。 HTMLのformタグでPOST送信したときのように、 POSTでデータを送信してかつ、その送信先に移動するということはできるのでしょうか。 LWPでなくてもいいです。 要するにHTMLのformタグでのPOST送信を手動ではなく、自動で行いたいわけですが、 <form action="http://xxx.xxx.xxx/test.cgi" method="post"> <input type="hidden" name="param1" value="dummy"> </form> このようなタグのあるHTMLを表示して、 JavaScriptでonLoadでsubmitすればできるのですが、 JavaScriptを使っているとSSLの場合にセキュリティのアラートがでる場合があるので、 できればPerlだけでできないかと思ったのです。

  • 続:LWPでHTML取得(その前にSocket取得)できない

    以前このカテゴリで質問させて頂いたものです。 (質問No.2007952、質問:LWPでHTML取得(その前にSocket取得)できない)  ※twinkleluzさんには大変お世話になりました。 上記質問では解決しきれなかった問題として、 ウィルスセキュリティのファイアウォールの設定が出来ない事、 があります。 Perlで、LWP::Simple::get()を使用し 一般サイトのHTMLソースを インターネット経由で取得出来るようにするには どのような設定を行えばよいか、 perl、ウィルスセキュリティについて詳しい方の 説明を宜しくお願い致します。 なお、使う関数ではなくperlの実行ファイルを ファイアウォールに登録というのは既に行っております。 ※ウィルス対策カテゴリでも同じ質問をさせて頂きましたが 回答を頂けませんでしたのでこちらでも質問させて頂きます。

  • 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
  • [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
  • 以前書きこんだ者です。Apacheを自宅サーバーとして動かしています。

    以前書きこんだ者です。Apacheを自宅サーバーとして動かしています。Perlを含むCGIとSSI、それにHtmlをApacheで稼働させたいと思っているのですが、cgi-bin 以下のディレクトリでPerlとCGIを 動かすことはできたのですが、Htmlが動きません。ここに投稿させていただいたところ、CGI専用 ディレクトリでHtmlを動かそうとしているとご指摘されたので、cgi-binのひとつ上のディレクトリ でHtmlを動かそうと、httpd.confの中のServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2"にしました。そしてエクスプローラで”localhost/htmlのファイル”を実行したところ、”Webページが見つかりません”とでてしまいました。何度いろいろなファイルで やっても同じエラーが出てしまいます。どうやらApache2.2のHtmlファイルを認識してくれない ようなのですが原因がわかりません。わかる方どうか教えてください。よろしくお願いします。

  • LWPで意図したhtmlがダウンロード出来ない

    LWPライブラリを使ってhtmlソースをダウンロードし たいのですが、指定したURLを、ブラウザを使って閲 覧できる内容と、異なるhtmlソースがLWPでは取得さ れてしまい、困っています。 具体的にはSGD(http://www.yeastgenome.org)内の (http://db.yeastgenome.org/cgi-bin/SGD/locus.pl? locus=ACE2)で表示される内容の、htmlソースが欲し いのですが、何故かlocus.plスクリプト自体がダウ ンロードされてしまいます。IEなどで[名前をつけて 保存]した場合には、希望のhtmlソースが得られるの ですが... ソースコードは以下の通りです。 use strict; use LWP::UserAgent; &get_entry("ACE2.html"); sub get_entry { my($outfile_name) = @_; my $ua = new LWP::UserAgent; $ua->agent("AgentName/0.1 " . $ua->agent); my $req = new HTTP::Request POST => 'http://db.yeastgenome.org/cgi-bin/SGD/locus.pl?locus=ACE2'; $req->content_type('application/x-www-form-urlencoded'); $req->content('started=1&match=www&errors=0&searchstring=CLN3'); my $res = $ua->request($req); unless($res->is_success) { die "Bad luck this time : "; } open(F, "> ".$outfile_name) || die "file open error :"; print F $res->content; close(F); $res->content; }

    • ベストアンサー
    • Perl
  • ApacheとPerlを別のサーバーに

    以下のような構成は可能でしょうか? 両方ともUNIXサーバーです。 Webサーバー(IP:192.168.0.1)と、 APLサーバー(IP:192.168.0.2)があり、Webサーバーには、Apacheを入れ、APLサーバーには、Perlを入れます。 Webサーバーは、HTML(CGI)を表示する画面機能のみ、APLサーバーにはCGI(Perl)のプログラム(この中でシェルをキックしたりもします)をおきます。 このようにWebサーバーでAPLサーバーのCGIを起動することは可能でしょうか? 会社の上司からの注文なんですが、APLサーバーにはapacheを入れることは不可。WebサーバーにCGI(Perl)を置くとAPLサーバーで起動するシェルをキックするプログラムや、計算結果などをいちいちリモート(rsh、rcpコマンドなど)で送らなければいけないので不可。とのことです。 このような構成が可能である場合の設定の仕方、また不可能であれば、それを可能にするための方法など、ご教授いただければと思います。 よろしくお願いいたします。

専門家に質問してみよう