20.19. SimpleHTTPServer —シンプルなHTTPリクエストハンドラー—Pythonドキュメント
20.19。 SimpleHTTPServer —単純なHTTPリクエストハンドラ
ノート
SimpleHTTPServer モジュールは、Python3のhttp.server
に統合されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。
SimpleHTTPServer モジュールは、 BaseHTTPServer.BaseHTTPRequestHandler とインターフェイス互換性のある単一のクラス SimpleHTTPRequestHandler を定義します。
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'
エラーにマップされます。 それ以外の場合、コンテンツタイプは、guess_type()
メソッドを呼び出すことによって推測されます。このメソッドは、 extensions_map 変数を使用します。推測されたコンテンツタイプの
'Content-type:'
ヘッダーが出力され、続いてファイルのサイズの'Content-Length:'
ヘッダー、ファイルの変更時刻の'Last-Modified:'
ヘッダーが出力されます。次に、ヘッダーの終わりを示す空白行が続き、ファイルの内容が出力されます。 ファイルのMIMEタイプが
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()
SimpleHTTPServer モジュールは、port number
引数を指定したインタープリターの -m スイッチを使用して直接呼び出すこともできます。 前の例と同様に、これは現在のディレクトリに関連するファイルを提供します。
python -m SimpleHTTPServer 8000