Permintaan Axios GET ke discord API memberikan respons 403 terlarang, tetapi berfungsi di Postman

Aug 18 2020

Saya menggunakan axios untuk membuat permintaan HTTP GET ke discords API di lingkungan lokal saya.

Saya menggunakan kode di bawah ini:

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

Bot adalah pemilik ID saluran: 735303230694621228 dan memiliki semua izin yang benar.

Hasil Sebenarnya:

Permintaan preflight (OPTIONS) memberikan respons 200 dengan semua header yang benar.

Setelah preflight, permintaan GET akan terjadi dan memberi saya respons berikut:

403 Forbidden

Browser juga akan memberikan kesalahan CORS, tetapi saya cukup yakin itu karena respons 403, karena 403 tidak memberikan semua header CORS yang benar.

Hasil yang diharapkan:

Status 200 OK

saya coba https://discord.com/api/channels/735303230694621228 dengan Postman dengan token Bot yang sama dan memberi saya 200 respons dengan isi yang diharapkan.

Adakah yang tahu mengapa saya mendapatkan 403 ketika saya menggunakan axios dengan browser di lingkungan lokal saya, tetapi saya mendapat tanggapan 200 dengan tukang pos?

Jawaban

1 jakxnz Aug 20 2020 at 05:45

Discord merespons dengan a 403for some User-Agent s pada beberapa sumber API.

Untuk mengujinya, kirim permintaan Postman dengan User-Agentheader Anda disetel ke nilai yang cocok dengan browser misalnyaUser-Agent: Mozilla/5.0

Sayangnya, browser akan menimpa User-Agentheader dalam sebuah axios.get(), bahkan jika Anda mendefinisikannya .get()di konfigurasi Anda.

Di atas adalah mengapa Postman ( User-Agent: PostmanRuntime/7.0.0) menerima 200respons, tetapi browser Anda ( User-Agent: Mozilla/5.0) menerima 403.


Perlu dicatat bahwa dokumentasi Discord API tidak menjelaskan hal ini (per Agustus 2020)https://discord.com/developers/docs/resources/channel#get-channel