CGI-BBS > CGI > Perl > Socketを使用したフィルタリングCGI


カレッヂ
カレッヂ


質問者 キタ  投稿日 9/18(火) 00:29:49  [削除] (返信・回答が付いた後にこの質問の削除はできません)
始めまして。

私、Perlの勉強を兼ね、趣味でちょっとしたページを作っていますが、以下のような機能を実現したくて、苦心しています。
CGI内部で、自動的に他のサイトにアクセスしてページデータ(HTML)を受け取り、それを加工してからユーザーの端末に表示する、というようなものです。

これは主にiモードでゲームをする場合などに、パケット代を節約したり、結果の記録を取ったりするために使用していて、一応、何種類かは既に使用できています。
しかし、相手(ゲームサイト)側のサーバー設定によっては、うまく作動しません。エイリアスのような機能で、公開されているURLとは異なる場所にファイルが格納されている場合に、「File Not Found」エラーになってしまうのです。

実際のプログラムは、下のような形です。
use Socket;

$port = getservbyname('http','tcp');
$iaddr = inet_aton("drinkin.lib.net");
$sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0);
connect(SOCKET,$sock_addr);
select(SOCKET); $|=1; select(STDOUT);
print SOCKET "GET / HTTP/1.0\r\n";
print SOCKET "\r\n";

IEなどでは、例えば"drinkin.lib.net"などと入れれば、「本当の格納場所」を意識しなくてもページデータが受け取れます。
しかし、上の形のCGIでは、「本当のアドレス・ディレクトリ」(エイリアスじゃないもの)を指定しないと表示できません(この場合、"/"ではなく"/~drinkin/")。つまり、サーバーの設定が判明しないと、この機能が使えません。

これは、クライアント側(この場合はCGI側)の機能により、解決できるはずだと思うのですが…

非常に長くなってしまいましたが、お分かりになる方がいらしたら、ぜひ、ヒントだけでもご教授下さい。
よろしくお願いいたします。



返信(回答)する


Web裏技