DiscordAPIへのAxiosGETリクエストは、403禁止応答を返しますが、Postmanで機能します

Aug 18 2020

私はaxiosを使用して、ローカル環境のdiscordsAPIにHTTPGETリクエストを送信しています。

私は以下のコードを使用しています:

axios.get('https://discord.com/api/channels/735303230694621228', {
    withCredentials: true,
    headers: {
      Authorization: 'Bot ' + botToken,
    },
  }).then((data) => {
    res = data.response
  })

ボットはチャネルID:735303230694621228の所有者であり、すべての正しい権限を持っています。

実結果:

プリフライトリクエスト(OPTIONS)は、すべての正しいヘッダーで200の応答を返します。

プリフライト後、GETリクエストが発生し、次の応答が返されます。

403 Forbidden

ブラウザでもCORSエラーが発生しますが、403がすべての正しいCORSヘッダーを提供するわけではないため、これは403応答が原因であると確信しています。

期待される結果:

Status 200 OK

やってみます https://discord.com/api/channels/735303230694621228 同じボットトークンを持つPostmanを使用すると、予想される本文で200の応答が得られます。

ローカル環境のブラウザーでaxiosを使用すると403が返されるのに、postmanで200の応答が返される理由を誰かが知っていますか?

回答

1 jakxnz Aug 20 2020 at 05:45

不和応答403のためのいくつかの User-Agent上のいくつかのAPIリソース。

これをテストするには、User-Agentヘッダーをブラウザに一致する値に設定してPostmanリクエストを送信します。User-Agent: Mozilla/5.0

残念ながら、の設定でUser-Agentヘッダーaxios.get()を定義した場合でも、ブラウザはのヘッダーを上書きします.get()

上記の理由により、Postman(User-Agent: PostmanRuntime/7.0.0)は200応答を受信しますが、ブラウザ(User-Agent: Mozilla/5.0)はを受信し403ます。


Discord APIドキュメントがこれを説明していないことは注目に値します(2020年8月現在)https://discord.com/developers/docs/resources/channel#get-channel