PythonでDiscord Webhooksにメッセージを送ると403

PythonでDiscordにメッセージ送信しようとすると403エラーが返ってきた。
HTTP Error 403: Forbiddenソースコードは↓。
import urllib.requestimport urllib.parseimport json
url = "https://...."
data = {"content": "hello"}data = json.dumps(data)data = data.encode("utf-8")request = urllib.request.Request( url, headers={ "Content-Type": "application/json", "User-Agent": "" }, data=data, method="POST")
try: with urllib.request.urlopen(request) as res: body = json.loads(res.read()) print(body)except Exception as e: print(e)答えは↓。ユーザエージェントの設定によってはDiscordがリクエストを受け付けてくれないらしい。
ヘッダーでUser-Agentを明示的に空文字を指定すると動くようになった。
import urllib.requestimport urllib.parseimport json
url = "https://...."
data = {"content": "hello"}data = json.dumps(data)data = data.encode("utf-8")request = urllib.request.Request( url, headers={ "Content-Type": "application/json", "User-Agent": "" }, data=data, method="POST")
try: with urllib.request.urlopen(request) as res: body = json.loads(res.read()) print(body)except Exception as e: print(e)原因をまとめると
- urllibはユーザエージェントを設定しない場合は Python-urllib を設定する
- DiscordはユーザエージェントがPython-urllibの場合は403を返す
ユーザエージェントをPythonに設定してもメッセージ送信成功したので、urllib限定の対応が入っているらしい。
スポンサーリンク
スポンサーリンク





