• ベストアンサー

PerlでURLにアクセスして、その内容をファイルに落とせますか?

知人から以下のような相談があったのですが、少し急ぎで困っています。 その知人が働くNGO団体で取引のある1万近い個人・法人のデータベースに関することなのです。 以前はその団体にUNIXマシンの管理者が一人いて、その人がUNIXマシンでデータベースを管理していたのだそうです。が、その管理人が亡くなって、誰もそのマシンにログインできないとのこと。でも、マシン自体は普通に動いています。 で、そのマシンはネットでつながっていて、外部から https://www.なんちゃら.ne.jp/なんちゃら/なんちゃら.cgi?1 https://www.なんちゃら.ne.jp/なんちゃら/なんちゃら.cgi?2 https://www.なんちゃら.ne.jp/なんちゃら/なんちゃら.cgi?3 … という感じでアクセスすると、データベースの会員番号1番、2番、3番の人のデータがHTMLで個人情報が表示されるような仕組みになっています。 (IDとパスワードの入力は必要ですが、1回入力すれば聞かれないみたいです) そこで、外部のマシンから、Perl(もしくは別のスクリプト言語でもいい)のスクリプトを実行することで、この1万人近いデータベースを吸いだせないか、ということなのですが、簡単なことなのでしょうか? ざっくりどんな感じのソースになるのかお教えいただければ助かります。 そのNGO団体のパソコンでPerlが動く環境ですので、Perlを勉強してソースを書けるように頑張って勉強しようと思ったのですが、ちょっと急ぎなのでヒントだけでも頂けたらと思った次第です。 よろしくお願いします。

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

  • ベストアンサー
  • takeshiue
  • ベストアンサー率100% (1/1)
回答No.4

一番良い方法はCGIのスクリプトの中身を調べて、 プログラムの中身を把握することだと思います。 10000件のデータを保管しているとのことなので、ファイルなのか、DBなのか わかりませんが、通常きちんとしたフォーマットに従って処理されていると思います。 事情があって、サーバーにログインできずにCGIソースを閲覧する事ができないということであれば、対応は以下のとおりだと思います。 ■シェル等を使い、データをHTML形式でダウンロード 以下の一行で1万件のデータ自体はファイルに取り出せると思います。 for x in `seq 1 1000`;do wget --output-document=$x http://example.com/exmaple.cgi?$x;done; ■ダウンロードしたファイルの解析 ダウンロードしたファイルの解析については、出力される内容に依存しますので、どうすればというのはなんとも言えないですが、 HTML::Parser などを使うと比較的簡単に処理できると思います。 仕事半分、趣味半分でそうしたことをやってますので、 自分で行う時間がないのであれば、下記のフォームからでも ご相談いただければと思います。 http://e-uematsu.net/php/form.php

kagichan
質問者

お礼

ありがとうございました。 実はいろいろ事情がありまして、そのunixマシンの隣に設置されているWindowsマシンからしかアクセスができない状況だったのですが、どうにかPerlでデータを吸いだせました。 ファイルの解析はこちらでどうにかできそうです。

その他の回答 (3)

noname#208124
noname#208124
回答No.3

普通LWP でもシェルスクリプトでwget回す方が簡単 自分が頼まれたら電源落としてHDD取り出すのが一番速いけども

kagichan
質問者

お礼

短いながら、参考になりました。ありがとうございました。 HDDの取り出し、は考えてもいなかったのですが、そんな手段もあるのだなと勉強になりました。

  • lesstia
  • ベストアンサー率45% (44/96)
回答No.2

なんちゃら.cgiを解析するのが一番早いと思います。 もしくは、 sh なんちゃら/なんちゃら.cgi?n >> ファイル みたいな感じのを繰り返すループを組めば取り出せるのではないでしょうか。

kagichan
質問者

お礼

ありがとうございます。 .cgiを外部マシンから解析するのは、ちょっと僕の手には負えませんでした。 unixマシンが使える環境ならいいのですが…。

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

Perl から Web サーバーへのHTTPアクセス、確かに出来ますが、私が知ってるのは Socket.pm を使う方法で、急造プログラマにできるかと言われるとかなり心配です。 Socket あるいはもっと簡単な方法での HTTPアクセスに成功したとしても、データを漏れなく取得する工夫やそれを別マシンのデータベースに流し込むのはより高スキルが要求されそうに思います。 失礼ながら、引き受けてもらえる技術者を探される方が良くないでしょうか。 そっち方面に明るい技術者が味方につけば、HTTPアクセス以外にどんなアプローチがあるかも相談できると思います。 あ、kagichan さんがたまたま Perl を知らないだけで他の言語(C とか)でのシステムプログラミングには熟練されてる方なら、私の書き込みは忘れてください。

kagichan
質問者

お礼

ありがとうございます。 Socket.pmは結局使えませんでした。すみません。 当方、20年~15年ほど前にとある企業にて、Cで組み込み機器の開発の 仕事をしていましたが、どうもネットワークとかそういう話には弱いのです (そういう意味ではほとんど初心者です)。