Curl POST - 411 Longitud requerida


29

Tenemos una API RestFUL que construimos en PHP. Si hacemos la solicitud:

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

Volvemos:

411 - Length Required

Aunque si simplemente agregamos -d ""a la solicitud, funciona y no hay error 411. ¿Hay alguna manera de no requerir agregar -d al comando curl?

Estamos usando el servidor web lighttpd, y creemos que es lighttpd NO php quien está devolviendo el error 411.

Respuestas:


47

Tiene razón: lighttpd no admite solicitudes POST con un cuerpo de mensaje vacío sin un encabezado 'Content-Length' establecido en cero, y CURL envía dicha solicitud. Hay discusiones de ida y vuelta sobre quién tiene razón, pero en mi opinión, lighttpd está roto. Una POST sin contenido de longitud y sin codificación de transferencia es perfectamente legal y no tiene cuerpo de mensaje.

Agregar -d ""hace que CURL envíe un Content-Length: 0encabezado, lo que resuelve el problema.

Puedes modificar lighttp. Encuentre el código que emite el error 411 y, en su lugar, configure la longitud del contenido en cero.


Gracias por la gran explicación, por lo que no hay una bandera para pasar a curl además -d ""o una directiva config lighttpd para configurar. -d ""solo parece un truco.
Justin

1
Es un hack. Si desea solucionar el problema de verdad, tendría que modificar lighttpd. En su lugar, puede usarlo -d @/dev/nullsi cree que se ve mejor. También puedes usar -H "Content-Length: 0". (Probé ambos, funcionan).
David Schwartz

Vale gracias. -d ""Parece ser la mejor opción.
Justin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.