• 締切済み

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

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

  • worao
  • お礼率81% (9/11)
  • Perl
  • 回答数3
  • ありがとう数3

みんなの回答

noname#19175
noname#19175
回答No.3

> ただ、何故かウィルスセキュリティのアンインストールまで行うと接続できるようになります。 セキュリティー関係の統合ソフトウェア? アンインストールまでしないといけないのは、停止できてないだけじゃないんでしょうか? > Invalid argument とりあえず、このエラーをなくすのが先では? LWPをどんな使い方をされているのかがわからないので、それを出してもらえないと答えられませんし、 なぜウイルスセキュリティーをアンインストールすると接続できるのか、という原因もわかりませんが、、、 >>・ファイアーウォールの種類は何でしょうか。 > すみません、どのような答をお返しすればよいかわかりません。回答例を頂けませんでしょうか。 ipfwかNortonInternetSecurityかWindowsPersonalFirewallくらいしか知りませんが、ほかにも種類はあります。 (名前を知ってるだけで使ったことはない(設定を変更したことがない)ですが。その辺はネットワークセキュリティーカテゴリーの方の方が詳しいと思います。) >・ファイアーウォールのログにはなんと書かれていますか? 私にはログの読み方がわからないので、識者の方の回答をお待ちください。

worao
質問者

お礼

>セキュリティー関係の統合ソフトウェア? その通りです。 ファイアウォールの他にウィルススキャンやら スパム対策機能やらが盛り込まれてます。 >アンインストールまでしないといけないのは、停止できてないだけじゃないんでしょうか? わかりました。 その停止方法はちゃんとしかるべきカテゴリで 訊くように致します。 >> Invalid argument >とりあえず、このエラーをなくすのが先では? 自分では無くせなかったのです。 問題のソフトのアンインストールで期待していた動作が確認できるので スクリプトの問題では無いです。 スクリプトを載せます。 ----------------------------------------------- #! /usr/bin/perl use LWP::Simple; #文字コード変換 use Jcode; use Encode qw/from_to/; use Encode::Guess qw/euc-jp shiftjis 7bit-jis/; use constant CHAR_CODE => "shiftjis"; $output = "./output.txt"; if(!open (OUT, "+<$output" )){ print "cannot open file."; } @codes = (7212,7213); foreach $code (@codes){ my $url = "http://finance.livedoor.com/quote/format?c=" . $code; my $content = get($url); Jcode::convert( $content, CHAR_CODE); @temp = split(/\n/,$content); my $flg = 0; my $target; foreach my $line (@temp){ if($flg == 1){ $line =~ /<small>(.*)<\/small>/; $target = $1; last; } if ($line =~ /発行済株式数/){ $flg = 1; next; } } print "[$code]$target株\n"; print OUT "$code\t$target\n"; } close(OUT); exit(0); ----------------------------------------------- 以上、宜しくお願い致します。

noname#19175
noname#19175
回答No.2

念のためお聞きしますが、 ・ファイアーウォールを停止、または無効にした状態での接続はできていますか? もしファイアーウォールを停止した状態でHTMLファイルを取得できるのであれば、 ・PerlスクリプトからLWP::Simple::getを使ったときに、もし何らかのエラーが返ってくるのであれば、そのエラーの内容は何でしょうか。 ・ファイアーウォールの種類は何でしょうか。 ・ファイアーウォールのログにはなんと書かれていますか? ・Perlスクリプトの実行方法は、CGIでしょうか?コマンドからでしょうか? (もしCGIでの実行なら、 Perlアプリケーションではなく、Perlスクリプトやウェブサーバーソフトウェア(Apacheなど)を登録してみてはいかがでしょうか?) とくにファイアーウォールの種類がわからなければ、設定方法はわかりません。 ファイアーウォールそれぞれで設定方法が違います。 それから質問内容がファイアーウォールの設定の仕方ですので、Perlでもウイルスでもありません。 ネットワークセキュリティー http://itmedia.okwave.jp/oshiete.php3?c=227 になると思いますし、こちらで上記をふまえて聞いた方がより詳しい方がおられると思います。

worao
質問者

お礼

回答ありがとうございます。 >・ファイアーウォールを停止、または無効にした状態での接続はできていますか? いいえ。接続できておりません。 タスクマネージャからプロセス終了をしても接続できません。 ただ、何故かウィルスセキュリティのアンインストールまで行うと接続できるようになります。 >・PerlスクリプトからLWP::Simple::getを使ったときに、もし何らかのエラーが返ってくるのであれば、そのエラーの内容は何でしょうか。 print $@; や print $!; をそのスクリプト実行時に実行してみると、 Invalid argument connect: timeout このようなメッセージが出ます。 >・ファイアーウォールの種類は何でしょうか。 すみません、どのような答をお返しすればよいかわかりません。回答例を頂けませんでしょうか。 >・ファイアーウォールのログにはなんと書かれていますか? 131466006,1511178,<userid>,SYSTEM,200,10,1,0,0,"AppAccess",0,|D:\cygwin\bin|,|perl.exe|,0,0,1,0 この程度のログしか吐かれない為、イマイチ分かりません。 >・Perlスクリプトの実行方法は、CGIでしょうか?コマンドからでしょうか? コマンドから、です。 以上、よろしくお願いいたします。

noname#19175
noname#19175
回答No.1

(1) Perl、LWPを使うとファイアウォールに止められるから、 それを止められないようにファイアーウォールを設定する方法は? (2) Perlでファイアーウォールを設定する方法は? (3) Perl、LWP::Simple::getの使い方は? という質問の、どれのことを言いたいのでしょうか?

worao
質問者

お礼

ご回答ありがとうございます。 説明が分かりづらく、申し訳ありません。。 (1)の答が知りたいです。 宜しくお願い致します。

関連するQ&A

  • ウィルスセキュリティとperlについて詳しい方へ

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

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

    初めて投稿させていただきます。 宜しくお願い致します。 LWP::Simpleなどを使ってWebサイトのHTMLソースを 取得したいのですが、できません。 同じplファイルを使って環境Aでは取得できているのですが、 環境Bでは出来ません。 LWPのバージョンは5.805で、両環境とも同じです。 どこでエラー?が起こっているかSimple.pmから ソースを追って見たところ、 LWP::Simple::_trivial_http_get( )のSocketを取得する所で undefが返却されているようです。 さらに追っていくと、 IO::Socket::INET::new( ) →IO::Socket::new( ) →IO::Socket::INET::configure( ) 最終的にここまで来ました。 configure( )の、 --------------------------------------------- if ($sock->connect(pack_sockaddr_in($rport, $raddr))) { # ${*$sock}{'io_socket_timeout'} = $timeout; return $sock; } --------------------------------------------- ここまで来て、上記のifブロックに入らず、timeoutかよくわかりませんが、 とにかくソケットを返していないようなのです。 その原因を、お教え頂きたいのです。 環境AとBで違う所は、大きな差としては、 無線LANを使ってない(A)か、使ってるか(B)しか無いです…。 また、環境Bで試した点としては、 ・無線LANルータに対して get('http://192.168.xx.yy');のようにした事と →結果、だめ ・apache tomcatが立ち上がっているローカルホストに get('http://192.168.xx.zz:8080');のようにした事 →結果、だめ です。 長々と状況説明してすみませんが、ご回答お待ちしております。 以上です。

    • ベストアンサー
    • Perl
  • LWPでHTMLが取得できないことがある

    LWPを使ってHTMLを取得しようとしているのですが、取得可能のサイト、不可能のサイトがあります。 たとえばyahooのトップページは取得できますが、wikipediaは取得できません。取得できない場合、エラーメッセージは出ません。 このようになる理由を教えてください。 よろしくお願いいたします。 環境:windowsXP & ActivePerl、またはwindowsXP & cygwin コード: #wikipediaのトップページHTMLを取得する use LWP::Simple; $site = get "http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8"; print $site; #yahooのトップページHTMLを取得する use LWP::Simple; $site = get "http://www.yahoo.co.jp/"; print $site;

    • ベストアンサー
    • Perl
  • LWPモジュールについて教えてください。

    プログラミングは初心者です。 LWPモジュールのサブクラスLWP::Simpleの get()という関数を使いたいです。 現在、Perlは5.005_3を使用しています。 use LWP::Simple; require LWP::Simple; ・ get(URL) と入れると、500 Internal Server Errorと言うものが出てしまいます。 LWPを使うとき、どのようにすれば使えるのかご指導お願いいたします。

    • ベストアンサー
    • Perl
  • 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
  • LWP::simpleがiswebで使えない

    use LWP::Simple; print (get("http://www.yahoo.co.jp/")); このように使っていたのですが、iswebにアップロードしたところ、ダウンロード出来ずに使えなくなりました。 iswebでは使えないようです。 なので、これの代わりになる方法を探しているのですが、何かありますか? Webページのソースを取得するだけでいいです。 なにかあるでしょうか? よろしくお願いします。

    • ベストアンサー
    • 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

  • 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でHTML取得(その前にSocket取得)できない原因について

    下記コードを使い WEBサイトの更新日付を取得したいのですが 実行すると Socket Error:Invalid argument のエラーが表示されソケットの作成に失敗します。 Perlのバージョンは 5.8.0でウィルス対策ソフト停止後のコード実行等対策等を考えて行いましたが状況は改善されません。 よければ、どうしてソケットの作成に失敗するのか教えていただけないでしょうか? 失敗テストケース $host:www.google.co.jp # テストコード # モジュールの使用宣言 use IO::Socket; # URLを入力 $ur1 = <STDIN>; # URLをホスト名とファイルパスに分割 chomp($ur1); if ($ur1 =~ /http:\/\/([^\/]+)(\/.*)/) { $host = $1; $file = $2; } else { die "そのURLには対応していません。\n"; } # ソケットオブジェクト作成 $client_socket = new IO::Socket::INET { PeerAddr => $host, PeerPort => 'http', Proto => 'tcp', TimeOut => '5' }; unless ($client_socket) { print "Socket Error:$!\n"; } # 入力をサーバーに送信 print "$host $file" . "\n"; print $client_socket "GET $file HTTP/1.0\n\n";

    • ベストアンサー
    • Perl
  • HTMLから自動的に文章取得

    HTMLデータの中から、狙った文章をPerlで抜き出すプログラムを書こうとしています。 (1)urlが並んでいるテキストファイルから、1番上を$urlに入れる (2)urlからHTMLを取得する (3)HTMLを解析、文字列の取得 (4)「author: title: 」のように、形を変えて、新たなテキストファイルに1行printする。 (5)すべてのurlに繰り返す と動くプログラムです。 LWP::Simpleのget関数を使うか、wgetを使うかも考えています。 ここでの質問は、(1)の、URLを上から順に引っ張ってくるプログラムの作り方を聞きたいです。 $i行目の改行までを取得、という考えでいいでしょうか? ベターな方法や、少しでも参考になる情報がありましたら教えていただけると嬉しいです。

    • ベストアンサー
    • Perl

専門家に質問してみよう