2019年8月29日木曜日

ラズパイ(Webサーバー・2)

前回、Python の http.server を実行してみました。
シンプルな動作(ページを表示するだけなど)ですと、
お手軽な手法と言えますが、クライアントから送られてきた情報を受け取り
データのやり取り考えるとこの手法で作ってみると、
バージョンにもよると思いますが、思うようにパラメータが受け取れない
現象が発生することとなります。

そこで、HTTPServer を利用しつつも、handler_class を作ることで、
GET や POST の動作を指定できる方法で構成してみます。

まず、Webサーバーの定義

import os
import sys
import http.server as s
import json
import logging

PORT = 8080

#--------------------------------------------------------------------------
# サーバ起動
#--------------------------------------------------------------------------
def run(server_class=s.HTTPServer, handler_class=MyHandler, port=PORT):
    logging.basicConfig(level=logging.INFO)
    server_address = ("", port)     # ("192.168.0.5", port) IPを指定した場合、IP外からアクセスが不能
    httpd = server_class(server_address, handler_class)
    logging.info("Starting httpd...\n")
    try:
        print("Starting server, use  to stop")
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    logging.info("Stopping httpd...\n")

if (__name__ == "__main__"):
    os.chdir(os.path.join(os.path.dirname(__file__), 'contents')) # カレントフォルダ設定
    if (len(sys.argv) == 2):
        run(port=int(sys.argv[1]))
    else:
        run()

起動時のパラメータとして、ポート番号が指定された場合、その番号で
起動するようにしています。(実行時に指定できるので便利ですね~)
GET や POST で受け取ったイベントの定義は、また次回...

https://www.filetalk.info/index.html

0 件のコメント:

コメントを投稿