Curl POST - 411 ความยาวที่ต้องการ


29

เรามี RestFUL API ที่เราสร้างใน PHP หากเราทำการร้องขอ:

curl -u api-key:api-passphrase https://api.domain.com/v1/product -X POST

เรากลับมา:

411 - Length Required

แม้ว่าเราเพียงแค่เพิ่ม-d ""ลงในคำขอก็ใช้งานได้และไม่มีข้อผิดพลาด 411 มีวิธีที่ไม่ต้องการเพิ่ม -d ในคำสั่ง curl หรือไม่?

เรากำลังใช้เว็บเซิร์ฟเวอร์ lighttpd และเชื่อว่า lighttpd ไม่ใช่ php ที่ส่งคืนข้อผิดพลาด 411

คำตอบ:


47

คุณถูกต้อง - lighttpd ไม่สนับสนุนคำขอ POST ที่มีเนื้อหาข้อความว่างโดยไม่มีส่วนหัว 'ความยาวเนื้อหา' ตั้งค่าเป็นศูนย์และ CURL ส่งคำขอดังกล่าว มีการโต้เถียงกันเกี่ยวกับใครถูก แต่ในความคิดของฉัน lighttpd ถูกทำลาย POST ที่ไม่มีความยาวเนื้อหาและไม่มีการเข้ารหัสการโอนย้ายถูกกฎหมายอย่างสมบูรณ์แบบและไม่มีเนื้อหาข้อความ

การเพิ่ม-d ""ทำให้ CURL ส่งContent-Length: 0ส่วนหัวซึ่งแก้ไขปัญหา

คุณสามารถแก้ไข lighttp ค้นหารหัสที่ออกข้อผิดพลาด 411 และตั้งค่าความยาวเนื้อหาเป็นศูนย์แทน


ขอบคุณสำหรับคำอธิบายที่ยอดเยี่ยมดังนั้นจึงไม่มีการตั้งค่าสถานะเพื่อส่งต่อไปยัง curl -d ""หรือคำสั่ง config lighttpd ที่จะตั้งค่า? -d ""ดูเหมือนแฮ็ค
Justin

1
มันเป็นแฮ็ค หากคุณต้องการแก้ไขปัญหาของจริงคุณต้องแก้ไข lighttpd คุณสามารถใช้แทน-d @/dev/nullหากคุณคิดว่ามันดูดีกว่า -H "Content-Length: 0"นอกจากนี้คุณยังสามารถใช้ (ฉันทดสอบทั้งสองอย่างนี้ทำงานได้)
David Schwartz

โอเคขอบคุณ. -d ""น่าจะเป็นตัวเลือกที่ดีที่สุด
จัสติน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.