kala
2000/01/27(木) 11:53:23
> CGI なんだから Content-type を出力すべきなのよ。
お恥ずかしい。初歩的ミスでした。
で,こんな感じに作り直してみましたが,まだ動きません。
[socket.cgi]
#!/usr/local/bin/perl
print<<"HTML_END";
Content-type: text/html
<HTML>
<HEAD>
<TITLE>www.yahoo.co.jp</TITLE>
</HEAD>
<BODY topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<FORM>
<TEXTAREA style="width:100%;height:100%">
HTML_END
$addr = (gethostbyname("www.yahoo.co.jp"))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
select(S); $| = 1; select(stdout);
print S "GET / HTTP/1.0\n\n";
while (<S>) { print; }
close(S);
print "</TEXTAREA></FORM></BODY></HTML>";
[nph-socket.cgi]
「Content-type:」の前に「HTTP/1.0 200 OK」を挿入。
[nph-test.cgi]
NPHスクリプトが動作するかを確かめるために
#!/usr/local/bin/perl
print "HTTP/1.0 200 OK\nContent-type: text/html\n\nTEST";
結果は,NPHスクリプトは二つともInternal Server Errorがでました。socket.cgiは表示されるのですが,www.yahoo.co.jpの情報は取得されていませんでした。ちなみに,とあるレンタルサーバーではすべて動作しました。どうして動かないのか気になります。
それはさておき,
http://www2d.biglobe.ne.jp/~gama/cgi/step10.htmの
httpreq.cgiが動くことからして,トピック自体の結論はinterQでsocketは使えるという答えになります。自信満々で断言してしまったことお詫びします。