11.25 標準モジュール BaseHTTPServer

 

    

このモジュールはHTTPサーバー(webサーバー)をインプリメントする2つのクラスを定義します。 通常、このモジュールは直接使用せず、webサーバーを構築する関数の基礎として使用します。 SimpleHTTPServerCGIHTTPServerモジュールをみてください。   

最初のクラスHTTPServerSocketServer.TCPServerのサブクラスです。 それは要求をハンドラに割り当てるために作成され、webソケットを受け付けます。 作成して実行されているプログラムは次のようにみえます。

def run(server_class=BaseHTTPServer.HTTPServer,
        handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()

HTTPServer (server_address, RequestHandlerClass)
このクラスはTCPServerクラスを拡張しています。 それは、インスタンス名server_nameのサーバーアドレスと server_portをもたせています。 サーバーは一般にハンドラのserverのインスタンス変数を通してアクセスできます

BaseHTTPRequestHandler (request, client_address, server)
このクラスはサーバーに届くHTTP要求を操作するのに使用します。 それ自身で、実際のHTTP要求の全てに応答することはできません。 それぞれの要求メソッドを操作するためサブクラスを作成しなくてはなりません。(例、GETやPOST) BaseHTTPRequestHandlerはいくつかのクラスとインスタンス変数と サブクラスで使用するメソッドを提供します。

ハンドラは要求とヘッダを分解し、要求の型に応じたメソッドを呼び出します。 メソッド名は要求に応じて作成されます。 たとえば、要求メソッド"SPAM"に対して、do_SPAM()メソッドを 引数なしで呼び出します。 全ての関連のある情報をハンドラのインスタンス変数に格納します。 サブクラスは優先する必要がありません。つまり、__init__()メソッドを拡張します。

BaseHTTPRequestHandlerには以下のインスタンス変数があります。

client_address
クライアントのアドレスを参照する型(host, port)のタプルを含みます。

command
コマンド(要求の型)を含みます。たとえば、'GET'です。

path
要求のパスを含みます。

request_version
要求のバージョン文字列を含みます。たとえば、'HTTP/1.0'です。

headers
MessageClassのクラス変数で表されるクラスのインスタンスを保持します。 このインスタンスは解析し、HTTP要求のヘッダを制御します。

rfile
入力ストリームを含みます。付加入力データのはじめにあります。

wfile
クライアントへ応答を書き出す出力ストリームを含みます。 このストリームに書き出すとき、HTTPプロトコルに正しく対応したものが使用されます。

BaseHTTPRequestHandlerには以下のクラス変数があります。

server_version
サーバーのソフトウェアのバージョンを表します。 You may want to override this.( これを無視したい。) フォーマットは複数のwhitespaceで分割された文字列です。 それぞれの文字列は型'名前[/バージョン]'です。 たとえば、'BaseHTTP/0.2'

sys_version
pythonのシステムのバージョンを含みます。 version_stringメソッドとserver_versionクラス変数とにある使用可能な型です。 たとえば、'Python/1.4'

error_message_format
クライアントへエラーの応答を作成して返すフォーマット文字列を表します。 括弧とキーワードをフォーマット表現を使用します。 フォーマットのオペランドは辞書でなくてはなりません。 codeキーは整数で、それは数値のHTTPエラーコードの値を表します。 messageは発生した(詳細な)エラーメッセージを含む文字列です。 explainはエラーコードの番号の説明です。 デフォルトのmessageexplainの値はresponsesクラスの変数になっています。

protocol_version
これは応答に使用されるHTTPプロトコルのバージョンを表します。 一般に、これは無視されません。デフォルト値は'HTTP/1.0'です。

MessageClass
HTTPヘッダを解析するrfc822.Messageのようなクラスを表します。 一般にこれは無視されず、デフォルト値はmimetools.Messageです。  

responses
この変数は整数のマッピングされたエラーコードと 短いメッセージと長いメッセージとの2つの要素のあるタプルを含みます。 たとえば、{code: (shortmessage, longmessage)} 通常、shortmessageはエラーの応答のmessageキーとして longmessageexplainキーとして使用されます。 ( error_message_format クラス変数を参考にして下さい)

BaseHTTPRequestHandlerインスタンスには以下のメソッドがあります。

handle ()
Overrides the superclass' handle() method to provide the specific handler behavior. (上位クラスのhandle()のメソッドより明確なハンドラの動作を提供するために優先します。) このメソッドは解析し、要求を適当なdo_*()メソッドに割り当てます。

send_error (code[, message])
クライアントへの完全なエラーの応答を送って記録します。 数値のcodeはHTTPのエラーコードを示します。付加情報としてmessageがあります。 完全な形のヘッダは送られ、 error_message_formatを使用している構成されたテキストが後にきます。

send_response (code[, message])
応答のヘッダを送り、受け付けられた要求を記録します。 ServerDateのヘッダの次にHTTPの応答行が送られます。 これら2つのヘッダの値はそれぞれversion_string()メソッドと date_time_string()メソッドから得られます。

send_header (keyword, value)
明確なMIMEヘッダを出力ストリームに書き出します。 値を示すvalueとともにkeywordはヘッダのキーワードを表します。

end_headers ()
空行を送ります。応答でMIMEヘッダのおわりを示します。

log_request ([code[, size]])
(うまく)受け付けられた要求を記録します。 codeは応答にある数値のHTTPコードのことです。 応答の大きさが有効なときsize引数として渡します。

log_error (...)
要求が完遂できなかったときエラーを記録します。 デフォルトでは、log_message()にメッセージを渡します。 そして同じ引数(formatと追加された値)をとります。

log_message (format, ...)
sys.stderrに任意のメッセージを記録します。 これは固有のエラーを記録する機構を作成したとき一般に優先されます。 format引数は標準のprintf型のフォーマット文字列です。 log_message()へ付加する引数は書式への入力として適用されます。 クライアントアドレス、現在の日付、および時間はメッセージを記録するときはいつも前につけられます。

version_string ()
サーバーソフトウェアのバージョン文字列を返します。 これはserver_versionsys_versionクラス変数の組み合わせです。

date_time_string ()
現在の日付および時間を返します。メッセージヘッダの形に書式化されています。

log_data_time_string ()
現在の日付および時間を返します。記録の形に書式化されています。

address_string ()
クライアントアドレスを返します。記録の形に書式化されています。 名前を調べることはクライアントのIPアドレスで実行されます。

guido@python.org