web-dev-qa-db-fra.com

Curl POST - 411 Longueur requise

Nous avons une API RestFUL que nous construisons en PHP. Si nous faisons la demande:

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

Nous revenons:

411 - Length Required

Mais si nous ajoutons simplement -d "" sur la demande cela fonctionne et aucune erreur 411. Existe-t-il un moyen de ne pas exiger l'ajout de -d à la commande curl?

Nous utilisons le serveur Web lighttpd, et nous croyons que son lighttpd PAS php qui renvoie l'erreur 411.

33
Justin

Vous avez raison - lighttpd ne prend pas en charge les requêtes POST avec un corps de message vide sans en-tête "Content-Length" défini sur zéro, et CURL envoie une telle requête. Il y a des arguments dans les deux sens. sur qui a raison, mais à mon avis, lighttpd est cassé. A POST sans Content-Length et sans Transfer-Encoding est parfaitement légal et n'a pas de corps de message.

Ajouter -d "" oblige CURL à envoyer un Content-Length: 0 en-tête, qui résout le problème.

Vous pouvez modifier lighttp. Recherchez le code qui génère l'erreur 411 et définissez à la place la longueur du contenu sur zéro.

50
David Schwartz