# cure 監視スクリプト Discord 通知 Cloudflare 403 問題
## 問題
cure サーバーの Python スクリプト(cross_monitor.py / recovery_advisor.py)が
Discord Webhook に `urllib.request` で POST すると HTTP 403 (Cloudflare error code: 1010) で失敗する。
`curl` では同じ URL に 204 で成功する。
## 原因
Cloudflare が `Python-urllib/3.x` の User-Agent をボットとして判定しブロック。
`curl` のデフォルト User-Agent は通過する。
## 解決策
`urllib.request` を使わず、`subprocess.run(["curl", ...])` に置き換える。
```python
def send_discord(msg: str) -> None:
payload = json.dumps({"content": msg})
subprocess.run(
["curl", "-sf", "-X", "POST", DISCORD_WEBHOOK,
"-H", "Content-Type: application/json",
"-d", payload],
capture_output=True, timeout=15,
)
```
## 適用済みファイル
- `/home/ubuntu/workspace/tools/ops/cross_monitor.py`
- `/home/ubuntu/workspace/tools/ops/recovery_advisor.py`
- `/home/ubuntu/workspace/tools/ops/infra/weekly_report.sh` (bash → python3 JSON encode + curl)
## 注意
User-Agent を偽装して通過させる方法もあるが、curl を使う方が保守性が高い。
instinct: cure監視スクリプトのDiscord通知がCloudflare 403でブロックされる