20.19. SimpleHTTPServer
— 簡潔な HTTP リクエストハンドラ¶
注釈
SimpleHTTPServer
モジュールは、Python 3では http.server
モジュールに統合されました。 2to3 ツールが自動的にソースコード内の import を修正します。
SimpleHTTPServer
モジュールは、 SimpleHTTPRequestHandler
クラス 1 つを提供しています。このクラスは、 BaseHTTPServer.BaseHTTPRequestHandler
に対して互換性のあるインタフェースを持っています。
SimpleHTTPServer
モジュールは以下のクラスを定義します:
-
class
SimpleHTTPServer.
SimpleHTTPRequestHandler
(request, client_address, server)¶ このクラスは、現在のディレクトリ以下にあるファイルを、HTTP リクエストにおけるディレクトリ構造に直接対応付けて提供します。
リクエストの解釈のような、多くの作業は基底クラス
BaseHTTPServer.BaseHTTPRequestHandler
で行われます。このクラスは関数do_GET()
およびdo_HEAD()
を実装しています。SimpleHTTPRequestHandler
では以下のメンバ変数を定義しています:-
server_version
¶
この値は
"SimpleHTTP/" + __version__
になります。__version__
はこのモジュールで定義されている値です。-
extensions_map
¶ 拡張子を MIME 型指定子に対応付ける辞書です。標準の型指定は空文字列で表され、この値は
application/octet-stream
と見なされます。対応付けは大小文字の区別をするので、小文字のキーのみを入れるべきです。
SimpleHTTPRequestHandler
では以下のメソッドを定義しています:-
do_HEAD
()¶ このメソッドは
'HEAD'
型のリクエスト処理を実行します: すなわち、GET
リクエストの時に送信されるものと同じヘッダを送信します。送信される可能性のあるヘッダについての完全な説明はdo_GET()
メソッドを参照してください。
-
do_GET
()¶ リクエストを現在の作業ディレクトリからの相対的なパスとして解釈することで、リクエストをローカルシステム上のファイルと対応付けます。
リクエストがディレクトリに対応付けられた場合、
index.html
またはindex.htm
を (この順序で) チェックします。もしファイルを発見できればその内容を、そうでなければディレクトリ一覧をlist_directory()
メソッドで生成して、返します。このメソッドはos.listdir()
をディレクトリのスキャンに用いており、listdir()
が失敗した場合には404
応答が返されます。リクエストがファイルに対応付けられた場合、そのファイルを開いて内容を返します。要求されたファイルを開く際に何らかの
IOError
例外が送出された場合、リクエストは404
、'File not found'
エラーに対応づけられます。そうでない場合、 extensions_map 変数を用いてguess_type()
メソッドにより content-type が推測されます。出力は
'Content-type:'
と推測されたコンテントタイプで、その後にファイルサイズを示す'Content-Length;'
ヘッダと、ファイルの更新日時を示す'Last-Modified:'
ヘッダが続きます。そしてヘッダの終了を示す空白行が続き、さらにその後にファイルの内容が続きます。このファイルはコンテントタイプが
text/
で始まっている場合はテキストモードで、そうでなければバイナリモードで開かれます。SimpleHTTPServer
モジュールのtest()
関数はSimpleHTTPRequestHandler
をハンドラとして使うサーバを作る例になっています。バージョン 2.5 で追加:
'Last-Modified'
ヘッダ.
-
SimpleHTTPServer
モジュールを使って現在のディレクトリ以下にあるファイルにアクセスできるだけの、非常に初歩的な Web サーバを立ち上げる方法は以下の通りです。
import SimpleHTTPServer
import SocketServer
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
インタプリタの -m
スイッチで SimpleHTTPServer
モジュールと ポート番号
を指定して直接実行することもできます。上の例と同じように、ここで立ち上がったサーバは現在のディレクトリ以下のファイルへのアクセスを提供します。
python -m SimpleHTTPServer 8000
参考
BaseHTTPServer
モジュール- Web サーバとリクエスト処理機構を実装した基底クラスです。