WebAPIを叩いたりする時に必要。
以前
上記がbookwormだと動作しない。Pythonが新しくなったせいらしい。
ラズパイOS | Debian | Python | Chromium |
---|---|---|---|
2020-08-20 | 10 buster | 3.7 | 92 |
2025-05-13 | 12 bookworm | 3.11 | 136 |
情報源
今回
WebAPIを叩く時などに使うローカルサーバを建てる。
- server.sh
- run_server.py
server.sh
#!/usr/bin/env bash set -Ceu #--------------------------------------------------------------------------- # HTTPローカルサーバを起動する #--------------------------------------------------------------------------- Run() { THIS="$(realpath "${BASH_SOURCE:-0}")"; HERE="$(dirname "$THIS")"; PARENT="$(dirname "$HERE")"; THIS_NAME="$(basename "$THIS")"; APP_ROOT="$PARENT"; cd "$HERE" PEM=cert.pem SERVER=run_server.py makePem() { openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost" } Https() { [ ! -f "./$PEM" ] && makePem || : URL="https://localhost:8000/" firefox "$URL" sudo python3 $SERVER } Https } Run "$@"
実行権限も付与しておく。
chmod +x server.sh
run_server.py
from http.server import HTTPServer, SimpleHTTPRequestHandler import ssl import socketserver import os class CORSRequestHandler (SimpleHTTPRequestHandler): def end_headers (self): self.send_header('Access-Control-Allow-Origin', '*') SimpleHTTPRequestHandler.end_headers(self) httpd = socketserver.TCPServer(('localhost', 8000), CORSRequestHandler ) context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(certfile='cert.pem', keyfile='key.pem') httpd.socket = context.wrap_socket(httpd.socket, server_side=True) print("Serving HTTPS on https://localhost:8000") httpd.serve_forever()
実行
./server.sh
これでfirefoxが起動するので、危険を承知でアクセスする的なUI操作をしてlocalhost
ページを閲覧する。
所感
Pythonには本当に手を焼かされる。なるだけ依存したくないが、他に代用できそうな奴もいないので使わざるを得ない。
Node.jsでサーバ建てるならもっと大量のコードやファイルを必要としたりしてサイズも肥大化しそう。