La richiesta GET di Axios all'API discord fornisce una risposta 403 proibita, ma funziona in Postman

Aug 18 2020

Sto usando axios per fare una richiesta HTTP GET all'API discords nel mio ambiente locale.

Sto usando il codice seguente:

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

Il Bot è il proprietario dell'id del canale: 735303230694621228 e dispone di tutte le autorizzazioni corrette.

Risultato attuale:

La richiesta di verifica preliminare (OPZIONI) fornisce una risposta di 200 con tutte le intestazioni corrette.

Dopo il preflight, la richiesta GET avverrà e mi darà la seguente risposta:

403 Forbidden

Anche il browser restituirà un errore CORS, ma sono abbastanza sicuro che sia a causa della risposta 403, poiché 403 non fornisce tutte le intestazioni CORS corrette.

Risultato atteso:

Status 200 OK

provo https://discord.com/api/channels/735303230694621228 con Postman con lo stesso token Bot e mi dà una risposta 200 con il corpo previsto.

Qualcuno ha idea del perché ricevo un 403 quando uso axios con il browser nel mio ambiente locale, ma ottengo una risposta 200 con il postino?

Risposte

1 jakxnz Aug 20 2020 at 05:45

Risponde disaccordo con una 403per alcuni User-Agent s su alcune risorse API.

Per verificarlo, invia una richiesta Postman con l' User-Agentintestazione impostata su un valore che corrisponde a un browser, ad esUser-Agent: Mozilla/5.0

Purtroppo, il browser sovrascriverà l' User-Agentintestazione in un axios.get(), anche se ne definisci uno nella tua .get()configurazione.

Quanto sopra è il motivo per cui Postman ( User-Agent: PostmanRuntime/7.0.0) riceve una 200risposta, ma il tuo browser ( User-Agent: Mozilla/5.0) riceve un 403.


Vale la pena notare che la documentazione dell'API Discord non lo spiega (ad agosto 2020)https://discord.com/developers/docs/resources/channel#get-channel