A solicitação GET do Axios para a API discord dá uma resposta 403 proibida, mas funciona no Postman
Estou usando axios para fazer uma solicitação HTTP GET para a API discords em meu ambiente local.
Estou usando o código abaixo:
axios.get('https://discord.com/api/channels/735303230694621228', {
withCredentials: true,
headers: {
Authorization: 'Bot ' + botToken,
},
}).then((data) => {
res = data.response
})
O Bot é o proprietário do ID do canal: 735303230694621228 e possui todas as permissões corretas.
Resultado atual:
A solicitação de comprovação (OPÇÕES) dá uma resposta de 200 com todos os cabeçalhos corretos.
Após o preflight, a solicitação GET acontecerá e me dará a seguinte resposta:
403 Forbidden
O navegador também apresentará um erro CORS, mas tenho quase certeza de que é por causa da resposta 403, pois o 403 não fornece todos os cabeçalhos CORS corretos.
Resultado esperado:
Status 200 OK
eu tento https://discord.com/api/channels/735303230694621228 com Postman com o mesmo token de Bot e me dá uma resposta 200 com o corpo esperado.
Alguém tem ideia de por que estou obtendo um 403 quando uso axios com o navegador no meu ambiente local, mas recebo uma resposta 200 com carteiro?
Respostas
Discord responde com um 403
para alguns User-Agent
s em alguns recursos da API.
Para testar isso, envie uma solicitação Postman com o User-Agent
cabeçalho definido para um valor que corresponda a um navegador, por exemploUser-Agent: Mozilla/5.0
Infelizmente, o navegador irá sobrescrever o User-Agent
cabeçalho em um axios.get()
, mesmo se você definir um em sua .get()
configuração.
O acima é o motivo pelo qual Postman ( User-Agent: PostmanRuntime/7.0.0
) recebe uma 200
resposta, mas seu navegador ( User-Agent: Mozilla/5.0
) recebe uma 403
.
É importante notar que a documentação da Discord API não explica isso (como em agosto de 2020)https://discord.com/developers/docs/resources/channel#get-channel