概要
Pythonのhttp.serverは簡単にWebサーバーを立ち上げる事の出来る非常に便利な標準ライブラリです。 サーバのHPを自作した製品のコントロール画面として使っています。
サーバの立ち上げ
先ずはアクセスすると”Hello HTTP”と表示する簡単はサーバを立ち上げます。下記はそのプログラム。
from http.server import HTTPServer, SimpleHTTPRequestHandler
class MyHandler(SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', "text/html")
self.end_headers()
self.wfile.write("Hello HTTP!
\n".encode())
host = ''
port = 8080
httpd = HTTPServer((host, port), MyHandler)
print('serving at port', port)
httpd.serve_forever()
このコードを以下のコマンド "$ sudo python3 hello.py" で実行。次にPCからこのサーバにブラウザを使ってアクセスします。 OSインストール時にホスト名”raspberrypi” とし、コードで使用ポートを8080としているので、 ブラウザのURL欄に”raspberrypi.local:8080″と入力。これで画面に”Hello HTTP!”と表示されます。 (注:ポート8080がすでに使用されている場合は変更下さい)
コードの説明
http.serverの説明はここー>"http.server --- HTTP サーバー” に有ります。今回はHTTPServer, SimpleHTTPRequestHandlerを使用しています。
- SimpleHTTPRequestHandler:Webサーバーとして最低限必要な機能を持つ。
- GET/POSTリクエストの処理を行う:
主な関数 役割 機能 do_GET() GETリクエスト処理 URLで文字等を受け取る do_POST() POSTリクエスト処理 フォームから送られたデータを受け取る end_headers() ヘッダー送信の終了 独自のHTTPヘッダーを追加 - index.html の自動認識:index.html や index.htm があれば、それを優先的に表示
- ディレクトリ・リスティング:index.html がない場合、フォルダにあるファイル一覧を表示
- など
- GET/POSTリクエストの処理を行う:
- HTTPServer:サーバ本体。ネットワークからの接続を待ち受け、適切なハンドラに引き渡す
- ポートの監視:指定されたポート番号(例: 8080)の監視
- リクエスト時の接続を確立:リクエスト内容を読み取る準備
- ハンドラへの受け渡し
- など
これらを元に”hello.py"を説明すると
- 3行目:class MyHandler(SimpleHTTPRequestHandler):
- SimpleHTTPRequestHandlerクラスを基底にした新しいクラスの宣言
- ここでクライアントからの要求を処理。
- 5行目:def do_GET(self): クライアントから、”GET”要求が有った場合、この関数が実行される。
- 7行目:クライアントに、”GET”要求を受けた事を返答。
- 8行目:これから送るデータの形式を”HTML”とヘッダに登録
- 9行目:ヘッダをクライアントに送信
- 10行目:”<h1> Hello HTTP!</h1> \n”をクライアントに送信し送信完了。
- 14行目:HTTPServer()関数の引数は、server_addressと RequestHandlerClassです。
- server_address:host(文字列)と port(数字) からなるタプル型変数
- host:サーバーがリッスンするアドレス
- 12行目:hostに ”(空文字列)を指定するとすべての利用可能なインターフェースを意味します。
- port:通信に使うポート番号
- 13行目:今回は8080を指定
- host:サーバーがリッスンするアドレス
- RequestHandlerClass:リクエストの処理。 MyHandlerを指定しています。
- server_address:host(文字列)と port(数字) からなるタプル型変数
- 15行目:これで、サーバが無限ループ。
”hello.py"の説明は以上です。ちなみにこのHTTPサーバは ”Ctrl+C” で停止します。
次回は
今回はHttp_serverの第一歩。次回は”index.html”等ファイルの送信について説明します。