2017/06/10

CGIで送られてきたすべてのPostクエリの内容を表示してみる。

前回CGIを動かせるように設定をしてみましたが、
やはりサーバーとやり取りをするためには、リクエストを受けて処理することが必要です。

でも、デバッグするとき全部のinput要素のnamaなんか書いてられない・・。めんどくさい!
なので送られてきたものをすべて表示する処理をいろいろ調べて書いてみました。
今回はPerlとPythonの二つです。

以下のコードです。
[Perl編]





#!/bin/perl

use CGI;

my $cgi = new CGI;
my $ResultHTML ="";

my $ResultHTML .= "<div>\n<p>受信結果</p>\n";
my @Keys = $cgi->param;

# 全てのパラメータを取得する
foreach my $Key (@Keys) {
    $ResultHTML .= "Form[".$Key."]:". $cgi->param($Key) . "<br />\n";
}

$ResultHTML .= "</div>";

my $html = <<'EOS';
Content-Type: text/html

<html>
<head>
    <title>フォーム取得テスト</title>
</head>
<body>
<div>
<form action="./formrq-pl.cgi" method="post">
    Text<br />
    <input type"Text" name="Text" value="一行テキスト" ><br /><br />
    Radio<br />
    <input type="radio" name="Radio" value="radio0" checked="checked"/>ラジオ0<br />
    <input type="radio" name="Radio" value="radio1" />ラジオ1<br />
    <input type="radio" name="Radio" value="radio2" />ラジ2<br /><br />
    Range<br />
    <input type="range" name="Range" /><br />
    ChackBox<br />
    <input type="checkbox" name="Chack0" value="000" checked="checked"/> 001<br />
    <input type="checkbox" name="Chack1" value="001" /> 001<br />
    <input type="checkbox" name="Chack2" value="002" /> 002<br /><br />
    SelectBox<br />
    <select name="Select">
            <option>Select0</option>
            <option>Select1</option>
            <option>Select2</option>
    </select><br /><br /<br />
    TextArea<br />
    <textarea name="TextArea" rows="4" cols="40">複数行のテキストボックス</textarea><br /><br />
    <button type="submit">Submitボタン</button>

</form>
</div>
EOS

print $html;

print $ResultHTML;

$html = <<'EOS';
</body>
</html>
EOS

print $html;




[Python編]




#!/usr/bin/python
# -*- coding: utf-8 -*-

from os import environ
import cgi

Forms = cgi.FieldStorage( environ=environ, keep_blank_values=True )
Keys = Forms.keys()

ResultHTML ="";
ResultHTML += "<div>\n<p>受信結果</p>\n";

# 全てのパラメータを取得する
for Key in Keys:
    ResultHTML += "Form[" + Key + "]:" + Forms[Key].value + "<br />\n";

ResultHTML += "</div>";


html = '''Content-Type: text/html

<html>
<head>
  <title>フォーム取得テスト</title>
</head>
<body>
<div>
<form action="./formrq-py.cgi" method="post">
  Text<br />
  <input type"Text" name="Text" value="一行テキスト" ><br /><br />
  Radio<br />
  <input type="radio" name="Radio" value="radio0" checked="checked"/>ラジオ0<br />
  <input type="radio" name="Radio" value="radio1" />ラジオ1<br />
  <input type="radio" name="Radio" value="radio2" />ラジオ2<br /><br />
  Range<br />
  <input type="range" name="Range" /><br />
  ChackBox<br />
  <input type="checkbox" name="Chack0" value="000" checked="checked"/> 001<br />
  <input type="checkbox" name="Chack1" value="001" /> 001<br />
  <input type="checkbox" name="Chack2" value="002" /> 002<br /><br />
  SelectBox<br />
  <select name="Select">
    <option>Select0</option>
    <option>Select1</option>
    <option>Select2</option>
  </select><br /><br /<br />
  TextArea<br />
  <textarea name="TextArea" rows="4" cols="40">複数行のテキストボックス</textarea><br /><br />
  <button type="submit">Submitボタン</button>

</form>
</div>
'''
print html;

print ResultHTML;

html ='''
</body>
</html>
'''
print html;



作成したら適当な名前を付けて保存しておきましょう。
パーミッションの設定もお忘れなく!
それではアクセスしてみましょう。
以下のようなサイトが表示されます。

一回「Submitボタン」を押してみましょう! フォームの下に送信結果が表示されます。
各項目のリクエスト結果が表示できましたね。

ご参考になれば!

0 件のコメント:

コメントを投稿

AWSに手を出してフレームワークも使ってみたが・・・。

サイトを作り直しました。 AWS上に構築した Content created by AXY を作り直しました。 具体的にはbottle.pyを使ったpythonで構築したサイトからPHP7を使用したサイトに再構築しています。 特別何か問題点があったというわけで...