Запрос Axios GET к API Discord дает запрещенный ответ 403, но работает в Postman

Aug 18 2020

Я использую axios, чтобы сделать HTTP-запрос GET к API Discords в моей локальной среде.

Я использую следующий код:

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

Бот является владельцем идентификатора канала: 735303230694621228 и имеет все необходимые разрешения.

Фактический результат:

Предварительный запрос (OPTIONS) дает ответ 200 со всеми правильными заголовками.

После предполетной проверки произойдет запрос GET, который даст мне следующий ответ:

403 Forbidden

Браузер также выдаст ошибку CORS, но я почти уверен, что это из-за ответа 403, поскольку 403 не выдает все правильные заголовки CORS.

Ожидаемый результат:

Status 200 OK

я пытаюсь https://discord.com/api/channels/735303230694621228 с почтальоном с тем же токеном бота, и он дает мне ответ 200 с ожидаемым телом.

Кто-нибудь знает, почему я получаю 403, когда использую axios с браузером в моей локальной среде, но я получаю ответ 200 от почтальона?

Ответы

1 jakxnz Aug 20 2020 at 05:45

Раздор отвечает с 403для некоторых User-Agent с на некоторых API ресурсов.

Чтобы проверить это, отправьте запрос Postman с вашим User-Agentзаголовком, установленным на значение, соответствующее браузеру, напримерUser-Agent: Mozilla/5.0

К сожалению, браузер переопределит User-Agentзаголовок в файле axios.get(), даже если вы определите его в своей .get()конфигурации.

Вышесказанное объясняет, почему Postman ( User-Agent: PostmanRuntime/7.0.0) получает 200ответ, а ваш браузер ( User-Agent: Mozilla/5.0) получает ответ 403.


Стоит отметить, что документация по API Discord этого не объясняет (по состоянию на август 2020 г.)https://discord.com/developers/docs/resources/channel#get-channel