LoginSignup
0
0

すべての HTTP リクエストを受け取ってログに表示するやつ

Posted at

Webhook でどんなデータが送られてくるのかを確認するために「とりあえず送られてきた情報を全部ログに出す Web アプリ」が欲しいなと思って Python で書いたやつ。

はじめは Python 標準の http.server だけで書こうと思ったけど、そこそこ面倒そうだったので aiohttp を使うことにした。

main.py
import json
import logging

from aiohttp import web

logging.basicConfig(level=logging.INFO)


async def handler(request):
    logging.info(f"{request.method} {request.rel_url}")
    logging.info(json.dumps(dict(request.headers)))
    logging.info(await request.text())
    return web.Response(status=200, text="ok")


app = web.Application()
app.router.add_route("*", "/{_:.*}", handler)

if __name__ == "__main__":
    web.run_app(app, port=80)

そのまま動かしてもいいけど、Docker で動かすときはこう。

Dockerfile
FROM python:3.12

RUN pip install aiohttp~=3.9.1

COPY main.py /

CMD ["python", "/main.py"]

起動してみて、試しに curl で叩いてみると、

$ curl -X POST -d'FOOOOOOO' http://localhost/webhook

こんな感じのログが出る。

======== Running on http://0.0.0.0:80 ========
(Press CTRL+C to quit)
INFO:root:POST /webhook
INFO:root:{"Host": "localhost", "User-Agent": "curl/8.1.2", "Accept": "*/*", "Content-Length": "12", "Content-Type": "application/x-www-form-urlencoded"}
INFO:root:FOOOOOOO
INFO:aiohttp.access:192.168.0.1 [23/Jan/2024:09:13:06 +0000] "POST /webhook HTTP/1.1" 200 153 "-" "curl/8.1.2"

実際に使うときはインターネットから HTTPS でアクセスできる必要があるので、ngrok を使うなどして公開する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0