python

【python】HTTPサーバを立てる【→業務改善したい人向け】

how to build http server on python
プログラム学生
プログラム学生

HTTPのGETをメッセージを受信するために、HTTPサーバを立てたんですが...

簡易的なHTTPサーバであれば、pythonで立てることができるよ。
今回はその方法を説明するね。

Tommy
Tommy

pythonでHTTPサーバを立てる概要

summary of building http server

pythonでLinuxサーバー上に簡易HTTPサーバーを立てる方法を説明します。

HTTPサーバを立てると、HTTPメッセージ(GETやPOST)をpythonプログラムの中で受信することができます。

例えば、チャットBOTへメッセージが届いた旨を知らせるイベントなどは、「指定された場所にHTTPメッセージを送信する」という構成になっている場合が多いです。

この構成の場合、チャットルームで、ユーザーがBOTへのメッセージが送信されると、そのこともとに、HTTPメッセージがHTTPサーバに送信されて、HTTPメッセージの受信をトリガに、別のpythonプログラムを実行するという使い方ができます。

pythonでHTTPサーバを立てる前提の環境

environment of building http server

pythonでHTTPサーバーを立てる前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

【python】バージョン確認の方法【→プログラミング初心者向け】

レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

レンタルサーバでプログラミングする方法【→レンタルサーバでできる!】

pythonでHTTPサーバを立てるサンプルプログラム

sample program of building http server

ライブラリのインポート

ここでは、HTTPサーバーを扱うライブラリBaseHTTPServerをインポートします。

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

HTTPリクエストを扱うクラスの定義

ここでは、HTTPリクエストを扱うクラスを定義しています。それぞれのHTTPリクエストが来た時の処理方法をこのクラスのメソッドとして定義しています。

class S(BaseHTTPRequestHandler):

	def _set_headers(self):

		self.send_response(200)
		self.send_header('Content-type', 'text/html')
		self.end_headers()

	def do_GET(self):

		self._set_headers()
		self.wfile.write("<html><body><h1>GET message receive!</h1></body></html>")

	def do_POST(self):

		self._set_headers()
		self.wfile.write("<html><body><h1>POST message receive!</h1></body></html>")

HTTPサーバを起動する関数の定義

ここでは、サーバーの立ち上げ処理を記載しています。

基本的な処理の流れは、httpdにhtttpクラスのインスタンスを取得し、そのクラスインスタンスのserve_forever()をコールすれば、HTTPサーバーが立ち上がります。

また、例としてポートは8888を指定しています。これは各自で任意のポートを指定してください。

なお、一旦httpd.serve_forever()を呼ぶとサーバー機能を常駐して提供する為、run_http_serverの戻り値は戻りません。

def run_http_server(server_class=HTTPServer, handler_class=S, port=8888):

	# startup HTTP server
	server_address = ('', port)
	httpd = server_class(server_address, handler_class)
	print('HTTP server started....')
	httpd.serve_forever()

定義した関数の実行

ここではMainの処理を記載します。サーバーを立ち上げるメソッドrun_http_server()を呼び出します。

if __name__ == '__main__':

	run_http_server()

-python
-,

Copyright© Tommy's blog , 2020 All Rights Reserved Powered by AFFINGER5.