- ベストアンサー
perlのソケット通信でwebブラウザーを製作中ですが、特定のサイトが閲覧できません
- perlのソケット通信でwebブラウザーのようなものを製作中ですが、特定のサイトが閲覧できず、NotFoundかDNSエラーになります。
- 参考にしたサンプルの他に追加すべき項目はあるでしょうか?よろしくお願いします。
- 現在の構文は以下の通りです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
AT_MARKさん 私も実はとほほさんのsocketのソースについて別のカテゴリで質問をさせていただいていたのですが、さきほど、ソースと一緒にくっついてきてしまうヘッダ情報を削除したソースを書いてくださった方がいらっしゃいますので、よろしければ参考にしてみてください。
その他の回答 (2)
No.1の補足を見ていて思ったのですが、 PHPファイルであるということに問題はないでしょうか? 3つのサイトの例を挙げていただきましたが、Yahoo!の場合は、トップページがindex.htmlのようですが、xxx.xrea.comの場合はindex.php、OK Webは、index.php3ですよね?PHPのときだけうまく行っていないように見えます。 以下は私の推測です。 とほほさんのPerlソースを使ってページを取ってくると、ページのソースの前に余計な文がくっついてきませんか?PHPは、それを実行することによってHTML文を出力する言語(ですよね?)ですので、くっついてきた余計な文がPHPではないため、エラーを起しているのではないでしょうか。 全然違っているかもしれません。 参考程度に。
補足
自分のサイトでも表示できない状態(DNSエラーのようなもの)なので、関係無いようです。 YAHOOは表示されたのは、もしかしたらDNSエラーで転送されていたのかもしれません。。
AT_MARKさん こんにちは。 同じとほほさんのBBSで、こんな質問が出ていました。 socket(S, 2, 2, 0); ← 真ん中の数字が1ではなく2 で動いたという内容です。 http://tohoho.wakusei.ne.jp/lng/199907/99070250.htm それぞれの数字の意味も載っていますよ。 とほほさん自身も、 http://tohoho.wakusei.ne.jp/wwwperl2.htm#socket の解説で、上記のように試してみることをお勧めしています。 試してみてはいかがですか?
補足
ありがとうございます。 socket(S, 2, 2, 0);に変更したところ、真っ白になり動作しませんでした。 現在の状況は www.xrea.com→www.value-domain.comのページ内容になる HTTP/1.1 200 OK Date: Sun, 21 Nov 2004 04:42:26 GMT Server: Apache Connection: close Content-Type: text/html; charset=EUC-JP www.yahoo.co.jp→(見た目上は)正常に表示される HTTP/1.1 200 OK Date: Sun, 21 Nov 2004 04:43:41 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Cache-Control: private Pragma: no-cache Connection: close Content-Type: text/html;charset=euc-jp okweb.jp→301 Moved Permanentlyとなる。 HTTP/1.1 301 Moved Permanently Date: Sun, 21 Nov 2004 04:44:28 GMT Server: Apache Location: http://okweb.jp/ Connection: close Content-Type: text/html; charset=iso-8859-1
お礼
あ、分かりました! gethostbynameでIPアドレスを取得しているからいけなかったようです。 各ドメインをPINGでIPアドレスを調べて直接アクセスしたところ、同じ結果になりました。 今は1つのサーバーに複数のドメインがあったりする(バーチャルドメインって言うのかな?)ためにこういう結果になったのかもしれません。。
補足
ソースを修正しつつ、試してみましたが結果は同じでした。。 それと、ソースを修正しているときに気が付いたのですが、 #!/usr/bin/perl print "Content-type:text/html\n\n"; $addr = (gethostbyname("www.yahoo.co.jp"))[4]; $name = pack("S n a4 x8", 2, 80, $addr); print "<HR>$addr,$name"; 上のようにソース小さくすると、$addr,$nameがうまく取得できていないようなんです。エラーと何か関係があるのでしょうか。。