プロが教えるわが家の防犯対策術!

すいません、アホです。いろいろ調べましたが、まったくみつかりませんでした。この質問をすることは初歩すぎて失礼かとおもいますが、堪忍してくださいませ。

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

A 回答 (2件)

> エラーメッセージはでないで、真っ白い画面がでます。



ウェブブラウザを変えて試しても同様ですか?
その時にウェブブラウザでソース表示をさせてみましたか?
Internet Explorer の場合は文字エンコードの選択がうまくいかない時や
構文エラーがあると真っ白い画面になることがあります。
(バージョンにもよりますが)

> これは$FORM{'url'}のエンコードの問題なのでしょうか?
$FORM{'url'} が正常にとれているかどうかはこの変数をファイルに吐き
出してみたりしてはどうでしょうか?
open(OUT,">check.txt"); print OUT $FORM{'url'};close(OUT);

まともな URL ではない場合や Not Found や Forbidden などのエラーの
場合には $content になにも入らないと思われるので

> print "Content-type: text/html\n\n$content";
この行で Use of uninitialized value in concatenation (.) or string
などのエラーとなると思われます。

# 環境について何も書かれていないのでなんとも言えませんがサーバへ
# root でログインできるのであれば tcpdump や ethereal や wireshark
# (tethereal や tshark) 等で通信内容をキャプチャしてみても良いかも
# しれません。

この回答への補足

大変もうしわけございません。
3日間この問題でずーと悩み続けたんですが、
再度コードをみていたら、コードのミスが原因でした。
大変失礼を致しました。面目ありません。
申し訳ございませんでした。

このたびはご丁寧にご回答頂きまして、
まことにありがとうございましたm_ _m

補足日時:2008/04/13 13:49
    • good
    • 0
この回答へのお礼

ご丁寧に本当に感謝致します。まことにありがとうございます。m__m

>>$FORM{'url'} が正常にとれているかどうかはこの変数をファイルに吐き出してみたりしてはどうでしょうか?
open(OUT,">check.txt"); print OUT $FORM{'url'};close(OUT);

ご指摘がありました上記は試しました、無事に指定のURLが入っていることが確認できました。

>># 環境について何も書かれていないのでなんとも言えませんが
レンタルサーバーでさくらインターネットさんを利用しております。
環境は下記でわかりますでしょうか?
http://www.sakura.ne.jp/rentalserver/matrix.html …

恥を見るのはわかっておりますが、私のヘボプログラムを下記に映しました。
どうかご参照を御願いいたします。
問題の部分は"これが問題です"とわかりやすく記しております。
大体半分より下ぐらいにあります
http://good.saloon.jp/test/lwp/link.txt

下記でやりますと、$contentには何もうつりませんが、
#$FORM{'url'}の中身はhttp://good.saloon.jpと指定のURLが入っているのは確認致しました。

$url = $FORM{'url'};
use LWP::Simple;
$content = get("$url");
print "Content-type: text/html\n\n$content";

下記でやりますと、無事に$contentが表示されております。
$url = 'http://good.saloon.jp';
use LWP::Simple;
$content = get("$url");
print "Content-type: text/html\n\n$content";

まことに再度お手数をお掛けして申し訳ございませんが、何卒お教えくださいませ。m__m

お礼日時:2008/04/13 12:53

> 下記のように指定した場合、相手HTMLを取得できません。

エラーメッ
> セージはでないで、真っ白い画面がでます。

アクセス先のサーバが空のページを返しているとは考えられませんか。
サイトによってはユーザーエージェントを見て、ブラウザ以外のアクセスを
区別しているところがあります。

例えば、google は wget でのアクセスを制限しています。

この回答への補足

大変もうしわけございません。
3日間この問題でずーと悩み続けたんですが、
再度コードをみていたら、コードのミスが原因でした。
大変失礼を致しました。面目ありません。
申し訳ございませんでした。
以後このようなことがないよう、再度注意をしてチェックを心がけるよう努力いたします。
このたびはご丁寧にご回答頂きまして、
まことにありがとうございましたm_ _m

補足日時:2008/04/13 13:52
    • good
    • 0
この回答へのお礼

ご親切にまことにありがとうございます。m_ _m
指定のURLは私個人がかりております、レンタルサーバーでございます。さくらインターネットさんをご利用させていただいております。
http://good.saloon.jp
ですが、$url = 'http://good.saloon.jp'
と直接入力すると$contentはうつります。

$url = $FORM{'url'};
print "Content-type: text/html\n\n$url";
use LWP::Simple;
$content = get("$url");

$FORM{'url'}はちゃんとhttp://good.saloon.jpと表示がされます。
しかし$contentは何もはいっておりません。

まことに恥を忍んで私のアホなソースを公開いたします。
何卒、ご参照のほどを御願いいたします。
問題のある箇所は中ごろの少し下にございます。
”問題があります”とわかりやすくしております。
http://good.saloon.jp/test/lwp/link.txt

何卒、宜しく御願いいたします。m_ _m

お礼日時:2008/04/13 13:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!