PythonでPOSTメソッドを使ってCGIプログラムに情報を渡す方法
CGIプログラムへ情報を渡す方法としては、POSTメソッドの方が一般的により信頼性が高いとされています。POSTメソッドは、GETメソッドとまったく同じ形式でデータをパッケージ化しますが、URLの「?」以降にテキスト文字列として付加して送信するのではなく、独立したメッセージとして送り出す点が異なります。このメッセージは、標準入力(stdin)を通じてCGIスクリプトへ渡されます。
POSTメソッドの主な特徴
- 送信データがURLに表示されないため、GETメソッドよりも安全性が高い
- URLの長さ制限を受けないため、大量のデータも送信できる
- データはリクエストボディに格納され、標準入力経由でCGIスクリプトに受け渡される
サンプルコード
以下は、GETメソッドとPOSTメソッドの両方に対応した hello_get.py スクリプトです。
#!/usr/bin/python
# CGI処理用モジュールのインポート
import cgi, cgitb
# FieldStorageインスタンスを作成
form = cgi.FieldStorage()
# 各フィールドからデータを取得
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"HTMLフォームからの実行例
次に、HTMLフォームと送信ボタンを使って2つの値を渡す例を見てみましょう。ここでも同じCGIスクリプト hello_get.py を使用して入力を処理します。
<form action="/cgi-bin/hello_get.py" method="post"> 名(First Name): <input type="text" name="first_name"><br /> 姓(Last Name): <input type="text" name="last_name" /> <input type="submit" value="送信" /> </form>
上記フォームの実際の出力結果は以下の通りです。テキストボックスに名前と姓を入力し、送信ボタンをクリックすると、CGIスクリプトが生成した結果ページが表示されます。

まとめ
POSTメソッドは、データをURLではなくリクエスト本文として送信するため、機密性の高い情報や長いデータを扱う場合に適しています。cgiモジュールの FieldStorage を使えば、GET・POSTどちらの形式でも同じコードでフォームデータを取得できる点も大きなメリットです。
-
PythonでPOSTメソッドを使ってCGIプログラムに情報を渡す方法
CGIプログラムへ情報を渡す方法としては、POSTメソッドの方が一般的により信頼性が高いとされています。POSTメソッドは、GETメソッドとまったく同じ形式でデータをパッケージ化しますが、URLの「?」以降にテキスト文字列として付加して送信するのではなく、独立したメッセージとして送り出す点が異なります。このメッセージは、標準入力(stdin)を通じてCGIスクリプトへ渡されます。POSTメソッドの主な特徴送信データがURLに表示されないため、GETメソッドよりも安全性が高いURLの長さ制限を受けないため、大量のデータも送信できるデータはリクエストボディに格納され、標準入力経由でCGIスクリプト
-
PythonでGETメソッドを使用して情報を渡す方法【CGIプログラミング入門】
GETメソッドとはGETメソッドは、エンコードされたユーザー情報をページリクエストに付加して送信する方式です。ページのURLとエンコードされた情報は「?」記号で区切られます。https://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2GETメソッドは、ブラウザからWebサーバーへ情報を渡す際のデフォルトの方法であり、送信した内容はブラウザのアドレスバー(Locationボックス)に長い文字列として表示されます。そのため、パスワードなどの機密情報をサーバーに送る場合には、GETメソッドは絶対に使用しないでください。また、GET