Curl POST - 411 Uzunluk Gerekli


29

PHP'de oluşturduğumuz bir RestFUL API'sımız var. İsteği yaparsak:

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

Geri döndük:

411 - Length Required

Gerçi -d ""istek üzerine eklersek çalışır ve 411 hata olmaz. Curl komutuna -d eklenmesini gerektirmeyen bir yol var mı?

Lighttpd web sunucusunu kullanıyoruz ve lighttpd'nin 411 hatasını döndüren php olmadığına inanıyoruz.

Yanıtlar:


47

Haklısın - lighttpd, 'Content-Length' başlığı sıfıra ayarlanmamış boş bir mesaj gövdesiyle POST isteklerini desteklemiyor ve CURL böyle bir istek gönderiyor. Kimin haklı olduğuna dair ileri sürülen tartışmalar var, ama bence lighttpd bozuldu. İçerik Uzunluğu ve Transfer Kodlaması bulunmayan bir POST tamamen yasaldır ve mesaj gövdesi yoktur.

Ekleme -d "", CURL'un bir Content-Length: 0sorunu göndermesine neden olur ve bu da sorunu giderir.

Lighttp'yi değiştirebilirsiniz. 411 hatasını veren kodu bulun ve içerik uzunluğunu sıfıra ayarlayın.


Harika bir açıklama için teşekkürler, bu yüzden -d ""kıvrılacağınız bir bayrak veya ayarlanacak bir yapılandırma yönergesi yok mu? -d ""Sadece bir kesmek gibi görünüyor.
Justin,

1
Bu bir hack. Sorunu gerçekten düzeltmek istiyorsanız, lighttpd'yi değiştirmeniz gerekir. Bunun -d @/dev/nulldaha iyi göründüğünü düşünüyorsanız bunun yerine kullanabilirsiniz . Ayrıca kullanabilirsiniz -H "Content-Length: 0". (İkisini de test ettim, çalışıyorlar.)
David Schwartz

Tamam teşekkürler. -d ""en iyi seçenek gibi görünüyor.
Justin,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.