Perlにて外部サーバーよりHTMLを読み込むスクリプトを書いていますが
万策付きお手上げとなりました。なんとか実現したく御願い致します。
環境から申し上げます。
作成パソコン OS → WIN98
ウェブサーバー → ANHTTPD
ActivePerl 5.8.7 Build 813
です。
以下がコードです。
use Socket;
use Net::hostent;
#ローカルホスト名
$localhost='localhost';
#リモートホスト
$remotehost='127.0.0.1';
#得たいページのURL
$page = 'http://127.0.0.1/index.html';
#接続し、ファイルハンドルSHにつなぐ。
$rh = gethost($remotehost);
$lh = gethost($localhost);
$proto = getprotobyname('tcp');
socket(SH,AF_INET,SOCK_STREAM,$proto) or print "error\n";
$port = getservbyname('http','tcp');
$socket_template='S n a4 x8';
$localhost_port = pack($socket_template,AF_INET,0,$lh->addr);
$remotehost_port = pack($socket_template,AF_INET,$port,$rh->addr);
bind(SH,$localhost_port) or print "error\n";
connect(SH,$remotehost_port) or print "error\n";
select SH;
$|=1;
#GETでリクエストを送信。
print SH "GET $page\n";
#得られたページの内容を@HTMLに入れる。
while(<SH>){
push @HTML,$_;
}
close SH;
select STDOUT;
#追加書き込みでhtml.txtを開く。
open(FILE, ">> html.txt");
#@HTMLがhtml.txtに書き込めない。
foreach (@HTML){
print FILE $_;
}
close(FILE);
print <<EOD;
content-type: text/html
<html>
<head>
<title>新規登録</title>
<link rel="stylesheet" href="shinki.css" type="text/css">
</head>
<body>
<h1>サーバーチェック</h1> <br><br>
HTMLさくせいしました。<br>
@HTML
</body>
</html>
EOD
exit;
以上です。
当然ながらブラウザにも表示されません。
コードの細かい事などもよく分かっていません。
お手数ですが
外部ファイルの取得が出来ますよう
ご教授宜しく御願い致します。
No.1ベストアンサー
- 回答日時:
> print SH "GET $page\n";
これじゃダメです。ちゃんと http プロトコルに従ってリクエストを出しましょう。
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616 …
・GET コマンドは、プロトコルバージョンを指定する必要がある
・リクエストが終わりであることを示すために、空行を出力する必要がある
というわけで、最低限だと
print SH "GET $page HTTP/1.0\n\n"
で動作する場合が多いと思います。
ただし、これで動くのはタマタマというかサーバ側の親切のおかげですので、
もうちょっと手堅くやるなら
$page =~ m#http://([^/]+)(/.*)$#;
$host=$1;
$path=$2;
print SH "GET $path HTTP/1.1\n"; # "GET /index.html HTTP/1.1\n"
print SH "Host: $host\n"; # "Host: 127.0.0.1\n"
print SH "\n";
といった感じで。
でも、こだわり始めるときりがないので、そういうのは
HTTPプロトコルに基づいたページ取得ライブラリを利用する方が簡単です。
例えば、LWP::Simple を使えば、
http://homepage3.nifty.com/hippo2000/perltips/LW …
use LWP::Simple;
$html = get('http://127.0.0.1/index.html');
と、実質たった1行でページ取得ができます。
mtaka2様
早々のご回答誠にありがとう御座います。
お陰さまでウェブ上のHTMLファイルが取得出来るようになりました。
詳しい事は分かりませんのでこれから勉強しようと思います。
また参考サイトと特に
use LWP::Simple;
$html = get('http://127.0.0.1/index.html');
は非情にありがたかったです。
私にとって正に目からうろこ状態でした。
拝借いたしましたお時間にもお礼申し上げます。
本当にありがとう御座います。
<(_ _)>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
画像が表示でnull; this.src
-
openした後、closeしないでプロ...
-
ファイルアイコンの左下に緑の□...
-
perlをバージョンアップしたら...
-
perlのrequireの動き方について...
-
Strawberry Perl for Windows ...
-
perl 正規表現でエラー
-
perl 初等プログラミングについて
-
Perlで時間の計算
-
perlについての質問
-
Perlで特定文字列から特定文字...
-
INDIRECT 横に再度抽出したい
-
Wallpaper Engineでおすすめの...
-
Perl ご教示お願い致します。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーバーのテキストファイルを...
-
LuaJITで日本語出力
-
表示を一覧表形式にしたいので...
-
IIS の@INC ERRORについて教えて
-
索引を目次の該当ページへ入れ...
-
HTMLからCGIへデータを引き継ぎ
-
CGIの中で異なるContent-typeの...
-
jcode.pl 使い方
-
ブラウザ表示されません大変困...
-
CGIで、ボタンを押した時に違う...
-
perlがうごきません
-
標準入力からデータが読込めない
-
ランダムに1行読込み フォーム...
-
sjisでの文字化け?
-
サーバー(UNIX)上のフォルダ...
-
検索結果テーブルの背景色を変...
-
他のWWWサーバーからHTMLを得る
-
ひらがなチェック
-
次のcgiファイルを開くには? ...
-
ソケットの使い方が分からない
おすすめ情報