Get,Post,Putで渡されたパラメータを取得するPerlによるCGI
設定ファイルはwww.jsonに記入しておく。
受け取るパラメータは27~28行目のように取得する。
Apacheからのデータは以下の環境変数を介して受け取る。
- REQUEST_METHOD:GET,PUT,POST,DELETEが入る
- QUERY_STRING:GETの場合のパラメータ
- CONTENT_LENGTH:PUTの場合のパラメータの長さ
Shellと違ってヒアドキュメント内にコマンドを書く事は出来ない模様。
#! /usr/bin/perl use strict; use warnings; use utf8; use File::Basename qw/basename dirname/; my $DIRNAME = dirname $0; my $BASENAME = basename $0; my $CONF_FILE= "$DIRNAME/cgi.json"; if ( ! -e $CONF_FILE ) { print "Content-type: text/html\n\n ${CONF_FILE} could not be read.\n$!$@"; exit; } my $CONFIG = do $CONF_FILE or die "${CONF_FILE} is could not read.\n$!$@"; my $PARMS = $ENV{'QUERY_STRING'}; my $METHOD = $ENV{'REQUEST_METHOD'}; if ( $METHOD eq "POST" || $METHOD eq "PUT" ) { read(STDIN, $PARMS, $ENV{'CONTENT_LENGTH'}); } my ($USER, $DATE); for my $PARM ( split(/&/, $PARMS) ) { my ($KEY,$VAL) = split(/=/,$PARM); $VAL =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/ego; if ($KEY eq "user") { $USER=$VAL; } if ($KEY eq "date") { $DATE=$VAL; } } print << "END"; Content-type: text/html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>$CONFIG->{title}</title> </head> <body> <div>Input parameters:$PARMS</div> <div>User:$USER</div> <div>Date:$DATE</div> </body> </html> END
外部定義ファイルcgi.jsonには以下の様に設定。
{ title => "CGI Perl Test page" }
0 件のコメント:
コメントを投稿