2014年8月10日日曜日

PerlでCGI

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 件のコメント:

コメントを投稿