Axios GET ร้องขอไปยัง discord API ให้การตอบสนองที่ต้องห้าม 403 แต่ใช้งานได้ใน Postman
ฉันใช้ 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 คน?
คำตอบ
ตอบสนองความขัดแย้งด้วย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