Axios GET ร้องขอไปยัง discord API ให้การตอบสนองที่ต้องห้าม 403 แต่ใช้งานได้ใน Postman

Aug 18 2020

ฉันใช้ axios เพื่อส่งคำขอ HTTP GET ไปยัง discords API ในสภาพแวดล้อมท้องถิ่นของฉัน

ฉันใช้รหัสด้านล่าง:

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

บ็อตเป็นเจ้าของช่อง id: 735303230694621228 และมีสิทธิ์ที่ถูกต้องทั้งหมด

ผลลัพธ์จริง:

คำขอไฟล่วงหน้า (OPTIONS) ให้การตอบกลับ 200 พร้อมส่วนหัวที่ถูกต้องทั้งหมด

หลังจากเปิดไฟล่วงหน้าคำขอ GET จะเกิดขึ้นและให้คำตอบต่อไปนี้แก่ฉัน:

403 Forbidden

เบราว์เซอร์จะให้ข้อผิดพลาด CORS ด้วย แต่ฉันค่อนข้างมั่นใจว่าเป็นเพราะการตอบสนอง 403 เนื่องจาก 403 ไม่ได้ให้ส่วนหัว CORS ที่ถูกต้องทั้งหมด

ผลลัพธ์ที่คาดหวัง:

Status 200 OK

ฉันลอง https://discord.com/api/channels/735303230694621228 กับบุรุษไปรษณีย์ที่มีโทเค็นบ็อตเดียวกันและทำให้ฉันได้รับการตอบสนอง 200 ครั้งพร้อมกับร่างกายที่คาดหวัง

ใครมีความคิดบ้างไหมว่าทำไมฉันถึงได้รับ 403 เมื่อฉันใช้ axios กับเบราว์เซอร์ในสภาพแวดล้อมในพื้นที่ของฉัน แต่ฉันได้รับคำตอบจากบุรุษไปรษณีย์ 200 คน?

คำตอบ

1 jakxnz Aug 20 2020 at 05:45

ตอบสนองความขัดแย้งด้วย403สำหรับบาง User-Agentบนบางทรัพยากร API

ในการทดสอบสิ่งนี้ให้ส่งคำร้องขอบุรุษไปรษณีย์โดยUser-Agentตั้งค่าส่วนหัวของคุณเป็นค่าที่ตรงกับเบราว์เซอร์เช่นUser-Agent: Mozilla/5.0

น่าเศร้าที่เบราว์เซอร์จะแทนที่User-Agentส่วนหัวในaxios.get()แม้ว่าคุณจะกำหนดส่วนหัวไว้ใน.get()config ของคุณก็ตาม

ข้างต้นเป็นสาเหตุที่ Postman ( User-Agent: PostmanRuntime/7.0.0) ได้รับการ200ตอบกลับ แต่เบราว์เซอร์ของคุณ ( User-Agent: Mozilla/5.0) ได้รับไฟล์403.


เป็นที่น่าสังเกตว่าเอกสาร Discord API ไม่ได้อธิบายสิ่งนี้ (ณ เดือนสิงหาคม 2020)https://discord.com/developers/docs/resources/channel#get-channel