Curl POST - 411 Panjang Diperlukan


29

Kami memiliki API RestFUL yang kami bangun dalam PHP. Jika kami mengajukan permintaan:

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

Kami kembali:

411 - Length Required

Padahal jika kita hanya menambahkan -d ""ke permintaan itu berfungsi dan tidak ada kesalahan 411. Apakah ada cara untuk tidak perlu menambahkan -d ke perintah curl?

Kami menggunakan server web lighttpd, dan yakin bahwa lighttpd BUKAN php yang mengembalikan kesalahan 411.

Jawaban:


47

Anda benar - lighttpd tidak mendukung permintaan POST dengan isi pesan kosong tanpa tajuk 'Panjang Konten' disetel ke nol, dan CURL mengirimkan permintaan semacam itu. Ada argumen bolak-balik tentang siapa yang benar, tetapi menurut saya, lighttpd rusak. POST tanpa Panjang Konten dan tanpa Transfer-Pengkodean adalah sah dan tidak memiliki badan pesan.

Menambahkan -d ""menyebabkan CURL mengirim Content-Length: 0header, yang menyelesaikan masalah.

Anda dapat memodifikasi lighttp. Temukan kode yang mengeluarkan kesalahan 411 dan alih-alih setel panjang konten menjadi nol.


Terima kasih atas penjelasannya yang bagus, jadi tidak ada flag untuk dilewatkan ke curl selain -d ""atau direktif config lighttpd untuk mengatur? -d ""hanya terlihat seperti retasan.
Justin

1
Itu adalah hack. Jika Anda ingin memperbaiki masalah secara nyata, Anda harus memodifikasi lighttpd. Anda bisa menggunakan -d @/dev/nulljika Anda berpikir itu terlihat lebih baik. Anda juga bisa menggunakan -H "Content-Length: 0". (Saya menguji keduanya, mereka berhasil.)
David Schwartz

Ok terima kasih. -d ""tampaknya menjadi pilihan terbaik.
Justin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.