このモジュールでは、 HTTP サーバ (Web サーバ) を実装するための
二つののクラスを定義しています。通常、このモジュールが直接使用
されることはなく、特定の機能を持つ Web サーバを構築するために
使われます。
SimpleHTTPServer および
CGIHTTPServer モジュール
を参照してください。
最初のクラス、HTTPServer は SocketServer.TCPServer
のサブクラスです。HTTPServer は HTTP ソケットを生成して
リクエスト待ち (listen) を行い、リクエストをハンドラに渡します。
サーバを作成して動作させるためのコードは以下のようになります:
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) |
-
このクラスはサーバに到着したリクエストを処理します。このメソッド
自体では、実際のリクエストに応答することはできません;
(GET や POST のような) 各リクエストメソッドを処理するためには
サブクラス化しなければなりません。
BaseHTTPRequestHandler では、サブクラスで使うための
クラスやインスタンス変数、メソッド群を数多く提供しています。
このハンドラはリクエストを解釈し、次いでリクエスト形式ごとに固有の
メソッドを呼び出します。メソッド名はリクエストの名称から構成
されます。例えば、リクエストメソッド "SPAM" に対しては、
do_SPAM() メソッドが引数なしで呼び出されます。
リクエストに関連する情報は全て、ハンドラのインスタンス変数
に記憶されています。サブクラスでは __init__() メソッドを
上書きしたり拡張したりする必要はありません。
BaseHTTPRequestHandler は以下のインスタンス変数を持っています:
- client_address
-
HTTP クライアントのアドレスを参照している、
(host, port)
の形式をとるタプルが入っています。
- command
-
HTTP 命令 (リクエスト形式) が入っています。例えば
'GET'
です。
- path
-
リクエストされたパスが入っています。
- request_version
-
リクエストのバージョン文字列が入っています。例えば
'HTTP/1.0'
です。
- headers
-
MessageClass クラス変数で指定されたクラスのインスタンス
を保持しています。このインスタンスは HTTP リクエストのヘッダを
解釈し、管理しています。
- rfile
-
入力ストリームが入っており、そのファイルポインタはオプション
入力データ部の先頭を指しています。
- wfile
-
クライアントに返送する応答を書き込むための出力ストリームが
入っています。このストリームに書き込む際には、HTTP プロトコル
に従った形式をとらなければなりません。
BaseHTTPRequestHandler は以下のクラス変数を持っています:
- server_version
-
サーバのソフトウェアバージョンを指定します。
この値は上書きする必要が生じるかもしれません。
書式は複数の文字列を空白で分割したもので、各文字列は
ソフトウェア名[/バージョン] の形式をとります。
例えば、
'BaseHTTP/0.2'
です。
- sys_version
-
Python 処理系のバージョンが、version_string メソッドや
server_version クラス変数で利用可能な形式で入っています。
例えば
'Python/1.4'
です。
- error_message_format
-
クライアントに返すエラー応答を構築するための書式化文字列を指定
します。この文字列は丸括弧で囲ったキー文字列で指定する形式を
使うので、書式化の対象となる値は辞書でなければなりません。
キー code は整数で、HTTP エラーコードを特定する数値です。
message は文字列で、何が発生したかを表す (詳細な)
エラーメッセージが入ります。explain はエラーコード番号
の説明です。message および explain の標準の値は
response クラス変数でみつけることができます。
- protocol_version
-
この値には応答に使われる HTTP プロトコルのバージョンを指定します。
'HTTP/1.1'
に設定されると、サーバは持続的 HTTP 接続を
許可します; しかしその場合、サーバは全てのクライアントに対する
応答に、正確な値を持つ Content-Length
ヘッダを
(send_header() を使って) 含め なければなりません。
以前のバージョンとの互換性を保つため、標準の設定値は
'HTTP/1.0'
です。
- MessageClass
-
HTTP ヘッダを解釈するための rfc822.Message 類似のクラスを
指定します。通常この値が上書きされることはなく、標準の値
mimetools.Message になっています。
- responses
-
この変数はエラーコードを表す整数を二つの要素をもつタプルに対応付け
ます。タプルには短いメッセージと長いメッセージが入っています。
例えば、
{code: (shortmessage, longmessage)}
といったようになります。shortmessage は通常、エラー応答に
おける message キーの値として使われ、longmessage
は explain キーの値として使われます
(error_message_format クラス変数を参照してください) 。
BaseHTTPRequestHandler インスタンスは以下のメソッドを持っています:
-
handle_one_request() を一度だけ (持続的接続が有効になって
いる場合には複数回) 呼び出して、HTTP リクエストを処理します。
このメソッドを上書きする必要はまったくありません; そうする代わりに
適切な do_*() を実装してください。
-
このメソッドはリクエストを解釈し、適切な do_*() メソッドに
転送します。このメソッドを上書きする必要はまったくありません。
send_error( |
code[, message]) |
-
完全なエラー応答をクライアントに送信し、ログ記録します。
code は数値型で、 HTTP エラーコードを指定します。
message はオプションで、より詳細なメッセージテキストです。
完全なヘッダのセットが送信された後、error_message_format
クラス変数を使って組み立てられたテキストが送られます。
send_response( |
code[, message]) |
-
応答ヘッダを送信し、受理したリクエストをログ記録します。HTTP
応答行が送られた後、Server および Date ヘッダが
送られます。これら二つのヘッダはそれぞれ version_string()
および date_time_string() メソッドで取り出します。
send_header( |
keyword, value) |
-
出力ストリームに特定の HTTP ヘッダを書き込みます。keyword
はヘッダのキーワードを指定し、value にはその値を指定します。
-
応答中の HTTP ヘッダの終了を示す空行を送信します。
log_request( |
[code[, size]]) |
-
受理された (成功した) リクエストをログに記録します。code には
この応答に関連付けられた HTTP コード番号を指定します。
応答メッセージの大きさを知ることができる場合、size パラメタ
に渡すとよいでしょう。
-
リクエストを遂行できなかった際に、エラーをログに記録します。
標準では、メッセージを log_message() に渡します。
従って同じ引数 (format と追加の値) を取ります。
log_message( |
format, ...) |
-
任意のメッセージを
sys.stderr
にログ記録します。
このメソッドは通常、カスタムのエラーログ記録機構を作成するために
上書きされます。format 引数は標準の printf 形式の書式化
文字列で、log_message() に渡された追加の引数は
書式化の入力として適用されます。ログ記録される全てのメッセージ
には、クライアントのアドレスおよび現在の日付、時刻が先頭に
付けられます。
-
サーバソフトウェアのバージョン文字列を返します。この文字列は
クラス変数 server_version および sys_version
を組み合わせたものです。
date_time_string( |
[timestamp]) |
-
メッセージヘッダ向けに書式化された、
timestamp(time.time()のフォーマットである必要があります)で与えられた日時を返します。
もし timestamp が省略された場合には、現在の日時が使われます。
出力は 'Sun, 06 Nov 1994 08:49:37 GMT'
のようになります。
バージョン 2.5 で 新たに追加 された仕様:
timestamp パラメータ
-
ログ記録向けに書式化された、現在の日付および時刻を返します。
-
ログ記録向けに書式化された、クライアントのアドレスを返します。
このときクライアントの IP アドレスに対する名前解決を行います。
リリース 2.5 ,19th September, 2006 更新
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。