La requête Axios GET à l'API Discord donne une réponse 403 interdite, mais fonctionne dans Postman
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
Discord répond avec un 403
pour certains User-Agent
sur certaines ressources API.
Pour tester cela, envoyez une demande Postman avec votre en- User-Agent
tête défini sur une valeur qui correspond à un navigateur, par exempleUser-Agent: Mozilla/5.0
Malheureusement, le navigateur remplacera l 'en - User-Agent
tê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 200
ré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