元のCGI 仕様では、コマンド ラインから簡単に実行できます。また、特定の HTTP 専用インターフェイスとしてではなく、FTP と gopher、および新しいトップレベル URL スキームを処理できるものとして完全に意図されていました。それを特定するのを手伝ったとき、私は自分が何を望んでいたかを知っています。
私が参照した仕様は、必要なものをすべて提供するはずですが、ほとんどの場合、環境変数のコレクションにすぎません。次のリクエストが表示された場合:
http://some.server.com/some/path?a=b&c=d
環境変数は次のようになります。
SERVER_PROTOCOL=http
REQUEST_METHOD=GET
HTTP_HOST=some.server.com
SERVER_PORT=80
PATH_INFO=/some/path
QUERY_INFO=a=b&c=d
Perl でその極性を逆にするには、次のようにします。
$ENV{'SERVER_PROTOCOL'} = 'http';
$ENV{'REQUEST_METHOD'} = 'GET';
$ENV{'SERVER_PORT'} = 80;
$ENV{'PATH_INFO'} = '/some/path';
$ENV{'QUERY_INFO'} = 'a=b&c=d';
system("perl your-CGI-script.pl");
POST クエリの処理は少し複雑になり、必要になる可能性のある環境変数が増えます。最悪の場合、次のような簡単な CGI スクリプトでそれらをすべて列挙できます。
print "Content-Type: text/plain\r\n\r\n";
foreach (keys(%ENV))
{
print "$_=$ENV{$_}\r\n";
}
これを Web サーバーの CGI スクリプトの代わりに配置すると、渡されたすべての環境が表示されます (元の環境も表示されるため、いくつかの判断が必要になります)。