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, і замість цього встановіть довжину вмісту до нуля.


Дякую за чудове пояснення, тому немає прапора, який потрібно передати, щоб згорнутися, -d ""або налаштування config lighttpd для встановлення? -d ""просто схожий на злому.
Джастін

1
Це злом. Якщо ви хочете виправити проблему реально, вам доведеться змінити lighttpd. Натомість ви можете використовувати, -d @/dev/nullякщо ви думаєте, що це виглядає краще. Ви також можете використовувати -H "Content-Length: 0". (Я тестував і те, і інше, вони працюють.)
Девід Шварц,

Добре, дякую. -d ""здається, найкращий варіант.
Джастін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.