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.

Justin
sumber

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.

David Schwartz
sumber
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