Curl POST - 411 Länge erforderlich

29

Wir haben eine RestFUL-API, die wir in PHP erstellen. Wenn wir die Anfrage stellen:

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

Wir bekommen zurück:

411 - Length Required

Wenn wir einfach -d ""die Anfrage ergänzen , funktioniert es und es tritt kein 411-Fehler auf. Gibt es eine Möglichkeit, dem Befehl curl nicht -d hinzuzufügen?

Wir benutzen den lighttpd-Webserver und glauben, dass der lighttpd NICHT PHP ist, der den 411-Fehler zurückgibt.

Justin
quelle

Antworten:

47

Sie haben Recht - lighttpd unterstützt keine POST-Anfragen mit einem leeren Nachrichtentext ohne 'Content-Length'-Header, der auf Null gesetzt ist, und CURL sendet eine solche Anfrage. Es gibt Streit darüber, wer Recht hat, aber meiner Meinung nach ist lighttpd kaputt. Ein POST ohne Content-Length und ohne Transfer-Encoding ist völlig legal und hat keinen Nachrichtentext.

Durch -d ""das Hinzufügen sendet CURL einen Content-Length: 0Header, der das Problem behebt.

Sie könnten lighttp ändern. Suchen Sie den Code, der den 411-Fehler ausgibt, und setzen Sie stattdessen die Inhaltslänge auf Null.

David Schwartz
quelle
Danke für die großartige Erklärung, gibt es also kein Flag, das zum Einrollen übergeben werden muss, -d ""oder eine config lighttpd-Direktive, die gesetzt werden muss? -d ""sieht aus wie ein Hack.
Justin
1
Es ist ein Hack. Wenn Sie das Problem wirklich beheben möchten, müssen Sie lighttpd ändern. Sie können stattdessen verwenden, -d @/dev/nullwenn Sie denken, dass das besser aussieht. Sie können auch verwenden -H "Content-Length: 0". (Ich habe beide getestet, sie funktionieren.)
David Schwartz
OK danke. -d ""scheint die beste Option zu sein.
Justin