20.19. SimpleHTTPServer —シンプルなHTTPリクエストハンドラー—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/simplehttpserver
移動先:案内検索

20.19。 SimpleHTTPServer —単純なHTTPリクエストハンドラ

ノート

SimpleHTTPServer モジュールは、Python3のhttp.serverに統合されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。


警告

SimpleHTTPServer は本番環境には推奨されません。 基本的なセキュリティチェックのみを実装します。


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

も参照してください

モジュール BaseHTTPServer
Webサーバーとリクエストハンドラーの基本クラスの実装。