कर्ल पोस्ट - 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 जोड़ने की आवश्यकता नहीं है?

हम lighttpd वेब सर्वर का उपयोग कर रहे हैं, और विश्वास करते हैं कि इसका lighttpd php नहीं है जो 411 त्रुटि दे रहा है।

जवाबों:


47

आप सही हैं - lighttpd शून्य संदेश निकाय के बिना POST अनुरोधों का समर्थन नहीं करता है, जो 'सामग्री-लंबाई' शीर्षक के बिना शून्य पर सेट है, और CURL इस तरह का अनुरोध भेजता है। आगे और पीछे तर्क है कि कौन सही है, लेकिन मेरी राय में, लाइटटैप टूट गया है। बिना सामग्री-लंबाई और बिना स्थानांतरण-एनकोडिंग वाला एक POST पूरी तरह से कानूनी है और इसमें कोई संदेश नहीं है।

जोड़ा जा रहा है -d ""का कारण बनता है एक भेजने के लिए कर्ल Content-Length: 0हैडर, जो समस्या का समाधान।

आप lighttp को संशोधित कर सकते हैं। उस कोड को ढूंढें जो 411 त्रुटि जारी करता है और इसके बजाय सामग्री की लंबाई शून्य पर सेट करता है।


महान स्पष्टीकरण के लिए धन्यवाद, इसलिए कर्ल को पास करने के लिए कोई झंडा नहीं है -d ""या सेट करने के लिए एक कॉन्फ़िगरेशन लाइटटैप निर्देश? -d ""बस एक हैक की तरह लग रहा है।
जस्टिन

1
यह एक हैक है। यदि आप समस्या को वास्तविक रूप से ठीक करना चाहते हैं, तो आपको लाइटटैप को संशोधित करना होगा। आप इसके बजाय उपयोग कर सकते हैं -d @/dev/nullयदि आपको लगता है कि बेहतर दिखता है। आप भी इस्तेमाल कर सकते हैं -H "Content-Length: 0"। (मैंने इन दोनों का परीक्षण किया, वे काम करते हैं।)
डेविड श्वार्ट्ज

ठीक है धन्यवाद। -d ""सबसे अच्छा विकल्प लगता है।
जस्टिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.