Perl - はじめての CGI
正直、CGI が何の事だか分かっていないので実際に動かしてみる。
CGI = HTTP サーバから環境変数とかでリクエストの内容をもらい、標準出力を通じてHTTPサーバにレスポンスを返す仕組み
と理解しとこう。
% sudo apt-get install apache2 % sudo chmod 777 /usr/lib/cgi-bin
% vim /usr/lib/cgi-bin/hello.pl
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; print "Content-type: text/plain\n\n"; print "Hello, world.\n"; print Dumper(\%ENV); print Dumper(\@ARGV); print join('', <STDIN>);
% chmod +x /usr/lib/cgi-bin/hello.pl
% wget -qSO - --post-data 'this is post data' 'http://localhost/cgi-bin/hello.pl?key=value' HTTP/1.1 200 OK Date: Mon, 04 Mar 2013 15:38:31 GMT Server: Apache/2.2.22 (Ubuntu) Vary: Accept-Encoding Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/plain Hello, world. $VAR1 = { 'SCRIPT_NAME' => '/cgi-bin/hello.pl', 'SERVER_NAME' => 'localhost', 'SERVER_ADMIN' => 'webmaster@localhost', 'HTTP_CONNECTION' => 'Keep-Alive', 'REQUEST_METHOD' => 'POST', 'CONTENT_LENGTH' => '17', 'HTTP_ACCEPT' => '*/*', 'SCRIPT_FILENAME' => '/usr/lib/cgi-bin/hello.pl', 'SERVER_SOFTWARE' => 'Apache/2.2.22 (Ubuntu)', 'QUERY_STRING' => 'key=value', 'REMOTE_PORT' => '42423', 'HTTP_USER_AGENT' => 'Wget/1.13.4 (linux-gnu)', 'SERVER_PORT' => '80', 'SERVER_SIGNATURE' => '<address>Apache/2.2.22 (Ubuntu) Server at localhost Port 80</address> ', 'REMOTE_ADDR' => '127.0.0.1', 'CONTENT_TYPE' => 'application/x-www-form-urlencoded', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'PATH' => '/usr/local/bin:/usr/bin:/bin', 'REQUEST_URI' => '/cgi-bin/hello.pl?key=value', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_ADDR' => '127.0.0.1', 'DOCUMENT_ROOT' => '/var/www', 'HTTP_HOST' => 'localhost' }; $VAR1 = []; this is post data
- Content-type だけ書けば、残りの header は apache が補ってくれそう。
- 環境変数にリクエストの内容が大体入ってくる。
- リクエストボディーは標準入力から渡される。
- ARGV は使わない?
とわかった。