A solicitação GET do Axios para a API discord dá uma resposta 403 proibida, mas funciona no Postman

Aug 18 2020

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

1 jakxnz Aug 20 2020 at 05:45

Discord responde com um 403para alguns User-Agent s em alguns recursos da API.

Para testar isso, envie uma solicitação Postman com o User-Agentcabeçalho definido para um valor que corresponda a um navegador, por exemploUser-Agent: Mozilla/5.0

Infelizmente, o navegador irá sobrescrever o User-Agentcabeç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 200resposta, 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