20.20. CGIHTTPServer — CGI対応のHTTPリクエストハンドラー—Pythonドキュメント
20.20。 CGIHTTPServer —CGI対応のHTTPリクエストハンドラ
ノート
CGIHTTPServer モジュールは、Python3のhttp.server
に統合されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。
CGIHTTPServer モジュールは、 BaseHTTPServer.BaseHTTPRequestHandler と互換性のあるインターフェイスであるリクエストハンドラークラスを定義し、 SimpleHTTPServer.SimpleHTTPRequestHandler から動作を継承しますが、CGIスクリプトを実行することもできます。
ノート
このモジュールは、UnixおよびWindowsシステムでCGIスクリプトを実行できます。
ノート
CGIHTTPRequestHandler クラスによって実行されるCGIスクリプトは、CGIスクリプトの実行前にコード200(スクリプト出力が続く)が送信されるため、リダイレクト(HTTPコード302)を実行できません。 これにより、ステータスコードが横取りされます。
CGIHTTPServer モジュールは、次のクラスを定義します。
- class CGIHTTPServer.CGIHTTPRequestHandler(request, client_address, server)
このクラスは、現在のディレクトリ以下のCGIスクリプトのファイルまたは出力を提供するために使用されます。 HTTP階層構造をローカルディレクトリ構造にマッピングすることは、 SimpleHTTPServer.SimpleHTTPRequestHandler とまったく同じであることに注意してください。
ただし、クラスがCGIスクリプトであると推測した場合、クラスはファイルとして提供するのではなく、CGIスクリプトを実行します。 ディレクトリベースのCGIのみが使用されます—他の一般的なサーバー構成は、特別な拡張機能をCGIスクリプトを示すものとして扱うことです。
do_GET()
およびdo_HEAD()
関数は、要求がcgi_directories
パスの下のどこかにある場合、ファイルを提供する代わりに、CGIスクリプトを実行して出力を提供するように変更されています。CGIHTTPRequestHandler は、次のデータメンバーを定義します。
- cgi_directories
これはデフォルトで
['/cgi-bin', '/htbin']
に設定され、CGIスクリプトを含むものとして扱うディレクトリを記述します。
CGIHTTPRequestHandler は、次のメソッドを定義します。
- do_POST()
このメソッドは
'POST'
リクエストタイプを提供し、CGIスクリプトでのみ許可されます。 非CGIURLにPOSTしようとすると、エラー501「CGIスクリプトにのみPOSTできます」が出力されます。
セキュリティ上の理由から、CGIスクリプトはユーザーnobodyのUIDで実行されることに注意してください。 CGIスクリプトの問題は、エラー403に変換されます。
使用例については、 test()関数の実装を参照してください。