PythonのCGI環境変数とは?主要な変数一覧とサンプルコードをわかりやすく解説
CGIプログラムは、実行時にWebサーバーからさまざまな環境変数を受け取ります。これらの環境変数には、クライアントのIPアドレスやブラウザの種類、送信されたデータの形式など、リクエストに関する重要な情報が格納されています。CGIプログラムを開発する際には、これらの変数を適切に活用することが不可欠です。
主なCGI環境変数の一覧
以下に、CGIプログラムからアクセスできる代表的な環境変数とその説明をまとめました。
| 番号 | 変数名と説明 |
|---|---|
| 1 | CONTENT_TYPE コンテンツのデータ型(MIMEタイプ)。クライアントがファイルアップロードなど、添付コンテンツをサーバーへ送信する際に使用されます。 |
| 2 | CONTENT_LENGTH 送信されたクエリ情報の長さ(バイト数)。POSTリクエストの場合にのみ利用できます。 |
| 3 | HTTP_COOKIE 設定されているクッキーを「キー=値」のペア形式で返します。 |
| 4 | HTTP_USER_AGENT リクエストを送信したユーザーエージェント(Webブラウザ)の名前やバージョンなどの情報を含むリクエストヘッダーフィールドです。 |
| 5 | PATH_INFO CGIスクリプトへのパス情報です。 |
| 6 | QUERY_STRING GETメソッドのリクエストとともにURLに付加されて送信される、URLエンコードされた情報です。 |
| 7 | REMOTE_ADDR リクエスト元のリモートホストのIPアドレス。アクセスログの記録や認証処理などに役立ちます。 |
| 8 | REMOTE_HOST リクエスト元ホストの完全修飾ドメイン名(FQDN)。この情報が取得できない場合は、REMOTE_ADDRを使ってIPアドレスを取得します。 |
| 9 | REQUEST_METHOD リクエストに使用されたメソッド。最も一般的なのはGETとPOSTです。 |
| 10 | SCRIPT_FILENAME CGIスクリプトへの絶対パス(フルパス)です。 |
| 11 | SCRIPT_NAME CGIスクリプトの名前です。 |
| 12 | SERVER_NAME サーバーのホスト名またはIPアドレスです。 |
| 13 | SERVER_SOFTWARE サーバーが稼働しているソフトウェアの名前とバージョンです。 |
すべてのCGI環境変数を表示するサンプルプログラム
次のシンプルなCGIプログラムは、利用可能なすべての環境変数を一覧表示します。os.environオブジェクトをループ処理することで、各変数の名前と値を出力しています。
#!/usr/bin/python
import os
print "Content-type: text/html\r\n\r\n";
print "<font size=+1>Environment</font><br>";
for param in os.environ.keys():
print "<b>%20s</b>: %s<br>" % (param, os.environ[param])
このスクリプトを実行すると、CONTENT_TYPEやQUERY_STRING、REMOTE_ADDRといった環境変数の名前と、それぞれに格納されている値がHTMLとして出力されます。
補足:Python 2とPython 3の違いについて
上記のサンプルコードはPython 2の構文(print文)で書かれています。Python 3で動作させる場合は、print()関数形式に書き換える必要があります。また、現在ではCGIよりもWSGIやフレームワーク(Flask、Djangoなど)を使った開発が主流となっていますが、CGIの仕組みを理解することはWebアプリケーションの基礎を学ぶうえで依然として有用です。
-
Python仮想環境の基本:venv・virtualenvによる環境構築と依存関係管理の完全ガイド
はじめに開発者は、Python標準ライブラリに含まれていないモジュールやパッケージを使用する必要があるプロジェクトに、頻繁に直面します。こうしたパッケージは、特定のアプリケーション専用であることが少なくありません。例えば、マシンには最新バージョンのPython(仮にPython 3.6とします)がインストールされているのに、あるプロジェクトでは特定のバージョン(Python 2.7)が求められるケースを考えてみましょう。この場合、新しいパッケージだけでなく、すでにインストール済みのアプリケーションに対しても特定バージョンの要求が発生します。すると要件同士が衝突し、2.7と3.6のどちらか一方を
-
環境変数を守る:APIキーやシークレットのためのセキュリティ対策ガイド
前回の記事「The Rubyists Guide To Environment Variables」では、環境変数システムの仕組みと、よくある誤解について解説しました。しかし、ある読者から「セキュリティについての言及が少ない」とのご指摘をいただきました。 現在では、秘密のAPIキーなどの重要な情報を環境変数に保存するのが一般的になっています。だからこそ、環境変数が持つセキュリティ上のリスクを正しく理解することが重要です。今回はそのポイントを見ていきましょう。 最悪のシナリオ ハッカーがroot権限、あるいはWebアプリケーションの所有ユーザーとしてサーバーへのアクセスに成功したと想像してくださ