Edited at

HTTPリクエストヘッダをレスポンスのbodyに埋めて返すだけの簡易モックサーバ

More than 1 year has passed since last update.

nginxのproxy_passの稼働確認でHTTPリクエストヘッダをレスポンスに埋めて返すだけのちょっとしたモックサーバが欲しくなりました。

簡易HTTPサーバといえば、ただの静的なファイル配信だけならpythonのワンライナーで十分なんだけど、

$ sudo python -m SimpleHTTPServer 80

今回はちょっとHTTPリクエストヘッダをレスポンスのbodyに埋めて返したかったので、簡単なpythonスクリプトを書いてみた。

ちなみになんでpythonなのかというと、多くのLinuxディストリビューションにデフォルトで入ってて標準ライブラリだけで追加の依存モジュールなしでできるという理由からpythonで実装してます。ちなみにpythonは2.7系です。

$ python --version

Python 2.7.12

こんなかんじのスクリプトを mock_server.py という名前で作る。


mock_server.py

#!/usr/bin/env python


from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class RequestHandler(BaseHTTPRequestHandler):

def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write('%s %s %s\n' % (self.command, self.path, self.request_version))
self.wfile.write(self.headers)
self.finish()
self.connection.close()

port = 80
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()


80番ポートをリッスンする都合でsudo経由で実行する。

$ sudo python mock_server.py

curlしてみる。

$ curl -H "Host: hoge.example.com" -H "X-MOCK-PROXY-PASS: hoge.example.com" http://127.0.0.1/hoge

GET /hoge HTTP/1.1
Host: hoge.example.com
User-Agent: curl/7.47.1
Accept: */*
X-MOCK-PROXY-PASS: hoge.example.com

これでテストしたいnginxを間に挟んで、curl => nginx => mockサーバみたいな構成にすれば、期待したHTTPヘッダが渡ってきてるか見れるし、適当なヘッダをデバッグ用に埋めたりしたらどのlocationでproxy_passされてるかとか簡単にテストできそうな気がする。