WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlでのソケット接続について

0:[投稿] ぷろふぁー [2006/11/27 22:06 ] [環境:IE6 Apache]


はじめまして、自分では解決できず書き込みさせていただきます。

cgiboy.comの前略プロフのゲストブックにソケット接続して、携帯対応の絵文字をPCでも表示できるように、絵文字のソースコードを置換して表示させるCGIを作ろうと考えています。

ソケット接続する際に引っかかってしまったのですが、あるサーバーでは、ソケット接続でうまく読み込めないと言う現象です。
具体的には、bbs7.cgiboy.com、bbs8.cgiboy.com、bbs9.cgiboy.com、bbs10.cgiboy.comではソケットで読み込めるのですが、bbs6.cgiboy.comだけはファイルが見つからないみたいです。

とりあえずソケット接続するところのソースを載せておきます。

bbs9.cgiboy.comは読み込めます。

#!/usr/local/bin/perl

use Socket;
$server='bbs9.cgiboy.com';
$port = 80;
$port = getservbyname($port,'tcp') unless $port =~ /^\d+/;
$iaddr = inet_aton($server)
               or die "$serverは存在しないホストです。\n";
$sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0)
               or die "ソケットを生成できません。\n";
connect(SOCKET,$sock_addr)
               or die "$serverのポート$portに接続できません。\n";
select(SOCKET); $|=1; select(STDOUT);

#○は同じ数字、□□□□□は5桁の数字。
#例:7R6123457
#※↑は適当ですのでfile open error! (ID not found?)
#実在する数字ではゲストブックが表示されます。
#$file='/○R6□□□□□○/';
$file='/7R6123457/';

print SOCKET "GET $file HTTP/1.0\r\n";
print SOCKET "\r\n";

     print "Content-type: text/html\n\n";
     while (<SOCKET>){
         print $_;
     }


次に読み込めない、bbs6.cgiboy.comです
結果は、Not Found
The requested URL /6R0123456/ was not found on this server.
となりました。

#!/usr/local/bin/perl

use Socket;
$server='bbs6.cgiboy.com';
$port = 80;
$port = getservbyname($port,'tcp') unless $port =~ /^\d+/;
$iaddr = inet_aton($server)
               or die "$serverは存在しないホストです。\n";
$sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0)
               or die "ソケットを生成できません。\n";
connect(SOCKET,$sock_addr)
               or die "$serverのポート$portに接続できません。\n";
select(SOCKET); $|=1; select(STDOUT);

#○は同じ数字、□□□□□は5桁の数字。
#例:6R0123456
#※↑は適当です、存在しません。
#こちらではfile open error! (ID not found?)すら表示されません
#当然、実在してても表示されません。
#$file='/○R0□□□□□○/';
$file='/6R0123456/';

print SOCKET "GET $file HTTP/1.0\r\n";
print SOCKET "\r\n";

     print "Content-type: text/html\n\n";
     while (<SOCKET>){
         print $_;
     }


もちろん、通常のブラウザではちゃんと表示されます。
何が違うのでしょうか?
わかる方がいましたら、ご指導お願いします。


実在するゲストブックはグーグルでお調べください。
例:
BBS6
http://www.google.co.jp/search?num=100&hl=ja&inlang=ja&ie=Shift_JIS&q=Back%81%A9To+The+Home++site%3Abbs6.cgiboy.com%2F&btnG=Google+%8C%9F%8D%F5&lr=

BBS9
http://www.google.co.jp/search?num=100&hl=ja&inlang=ja&ie=Shift_JIS&q=Back%81%A9To+The+Home++site%3Abbs9.cgiboy.com%2F&btnG=Google+%8C%9F%8D%F5&lr=


1:[回答] 古のもの [2006/11/28 09:18 ]

サーバがヴァーチャルドメイン設定の場合
リクエストヘッダで Host 情報を送らないと期待したデータは取得できませんね。
そのせいじゃない?

HTTP の仕様書には一通り目を通すことを勧めます。


3:[回答] 管理人 [2007/05/22 21:54 ]

TEST
テスト

回答(必須): 状態:

お名前(必須):

URL:




[戻る]