POSTとGET
GETメソッドとPOSTメソッドでリクエストする入力フォームと、サーバサイドで結果を返すCGIを作成。とほほを見て始めたんですが、二つのことを一緒にやろうとしたので、何度もくじけて、結果的に時間かかってしまった。
入力フォーム
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>form.html</title> <link rel="shortcut icon" href="favicon.ico"> </head> <body> <form method="GET" action="/cgi-bin/form.cgi"> <input type=hidden name="hl" value=ja> <input type=text name="data" maxlength=2048 size=55 value=""> <input type=submit name="btn" value="GET"> </form> <form method="POST" action="/cgi-bin/form.cgi"> <input type=hidden name="hl" value=ja> <input type=text name="data" maxlength=2048 size=55 value=""> <input type=submit name="btn" value="POST"> </form> </body> </html>
CGI
文法はまだまだ。でも、しばらくはこれで遊べると思う。
#!/usr/bin/perl # フォームに指定した値を読込みます if ($ENV{'REQUEST_METHOD'} eq "POST") { # POSTであれば標準入力から読込みます read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); } else { # GETであれば環境変数から読込みます $data = $ENV{'QUERY_STRING'}; } # &で区切られたものを配列へ代入します @assocarray = split(/&/, $data); # ハッシュ(keyとvalue)に分けます foreach $assoc (@assocarray) { ($key, $value) = split(/=/, $assoc); # URLエンコーディングされた値をデコードします $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $in{$key} = $value; } print << "EOF" Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cgi_form.cgi</title> <link rel="shortcut icon" href="favicon.ico"> </head> <body> <h1>メソッド、送信内容の確認</h1> <table border=1 cellspacing=1 cellpadding=3 summary="メソッド、送信内容の確認"> <tr><th>key</th><th>value</th></tr> <tr><td>submmit</td><td>$in{btn}</td></tr> <tr><td>hidden</td><td>$in{hl}</td></tr> <tr><td>text</td><td>$in{data}</td></tr> </table> </body> </html> EOF