Запрос Axios GET к API Discord дает запрещенный ответ 403, но работает в Postman
Я использую 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 от почтальона?
Ответы
Раздор отвечает с 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