Posted at

Pythonで簡単にHTTPサーバを作る

More than 3 years have passed since last update.

ちょっとした動作確認にさくっとHTTPサーバを作る場合の方法です.


CallbackServer.py

#!/usr/bin/env python


import requests
from BaseHTTPServer import HTTPServer
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse

def start(port, callback):
def handler(*args):
CallbackServer(callback, *args)
server = HTTPServer(('', int(port)), handler)
server.serve_forever()

class CallbackServer(BaseHTTPRequestHandler):
def __init__(self, callback, *args):
self.callback = callback
BaseHTTPRequestHandler.__init__(self, *args)

def do_GET(self):
parsed_path = urlparse.urlparse(self.path)
query = parsed_path.query
self.send_response(200)
self.end_headers()
result = self.callback(query)
message = '\r\n'.join(result)
self.wfile.write(message)
return


HTTPServerをベースにしてコールバック関数を設定しているクラスを定義しています.requestsはpip等でインストールしてください.

使い方はこんな感じ.


simple_test.py

#!/usr/bin/env python

# coding:utf-8

import sys
import CallbackServer

def callback_method(query):
return ['Hello', 'World!', 'with', query]

if __name__ == '__main__':
port = sys.argv[1]
CallbackServer.start(port, callback_method)


ポート番号だけ受け取って,ポート番号とHTTPアクセスがあった場合に呼び出されるメソッド(callback_method)を渡せば後は勝手にHTTPサーバが上がってくれます.

callback_methodは引数にGETクエリ(URLの?より後ろ側)を受け取って,Responseとして返す文字列をreturnで返します.

文字列のリストを返せば勝手にCRLFで改行されます.

起動は

./simple_test.py 12345

という感じで実行して,後はブラウザからhttp://localhost:12345/?hoge=123とかにアクセスすると

Hello

World!
with
hoge=123

が出力されます.