La requête Axios GET à l'API Discord donne une réponse 403 interdite, mais fonctionne dans Postman

Aug 18 2020

J'utilise axios pour faire une requête HTTP GET à l'API discords sur mon environnement local.

J'utilise le code ci-dessous:

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

Le Bot est le propriétaire de l'ID de canal: 735303230694621228 et dispose de toutes les autorisations appropriées.

Résultat actuel:

La demande de contrôle en amont (OPTIONS) donne une réponse de 200 avec tous les en-têtes corrects.

Après le contrôle en amont, la requête GET se produira et me donne la réponse suivante:

403 Forbidden

Le navigateur donnera également une erreur CORS, mais je suis presque sûr que c'est à cause de la réponse 403, car le 403 ne donne pas tous les en-têtes CORS corrects.

Résultat attendu:

Status 200 OK

J'essaie https://discord.com/api/channels/735303230694621228 avec Postman avec le même jeton Bot et cela me donne une réponse 200 avec le corps attendu.

Quelqu'un a-t-il une idée de la raison pour laquelle j'obtiens un 403 lorsque j'utilise axios avec le navigateur dans mon environnement local, mais j'obtiens une réponse 200 avec le facteur?

Réponses

1 jakxnz Aug 20 2020 at 05:45

Discord répond avec un 403pour certains User-Agent sur certaines ressources API.

Pour tester cela, envoyez une demande Postman avec votre en- User-Agenttête défini sur une valeur qui correspond à un navigateur, par exempleUser-Agent: Mozilla/5.0

Malheureusement, le navigateur remplacera l 'en - User-Agenttête dans un axios.get(), même si vous en définissez un dans la .get()configuration de votre.

Ce qui précède est la raison pour laquelle Postman ( User-Agent: PostmanRuntime/7.0.0) reçoit une 200réponse, mais votre navigateur ( User-Agent: Mozilla/5.0) reçoit un fichier 403.


Il convient de noter que la documentation de l'API Discord n'explique pas cela (en août 2020)https://discord.com/developers/docs/resources/channel#get-channel