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 を使うなどして公開する。