Curl POST - wymagana długość 411

29

Mamy RestFUL API, które budujemy w PHP. Jeśli złożymy wniosek:

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

Wracamy:

411 - Length Required

Jeśli po prostu dodamy -d ""do żądania, działa i nie ma błędu 411. Czy istnieje sposób, aby nie wymagać dodawania -d do polecenia curl?

Używamy serwera WWW lighttpd i uważamy, że jego lighttpd NIE jest php, który zwraca błąd 411.

Justin
źródło

Odpowiedzi:

47

Masz rację - lighttpd nie obsługuje żądań POST z pustą treścią wiadomości bez nagłówka „Content-Length” ustawionego na zero, a CURL wysyła takie żądanie. Toczy się spór o to, kto ma rację, ale moim zdaniem lighttpd jest zepsuty. POST bez długości treści i bez kodowania przesyłania jest całkowicie legalny i nie zawiera treści wiadomości.

Dodanie -d ""powoduje, że CURL wysyła Content-Length: 0nagłówek, co rozwiązuje problem.

Możesz zmodyfikować lighttp. Znajdź kod, który powoduje błąd 411, i zamiast tego ustaw długość treści na zero.

David Schwartz
źródło
Dzięki za świetne wyjaśnienie, więc nie ma żadnej flagi do przekazania poza curl, -d ""ani też dyrektywy config lighttpd do ustawienia? -d ""wygląda jak hack.
Justin
1
To jest hack. Jeśli chcesz naprawdę rozwiązać problem, musisz zmodyfikować lighttpd. Zamiast tego możesz użyć, -d @/dev/nulljeśli uważasz, że wygląda lepiej. Możesz także użyć -H "Content-Length: 0". (Przetestowałem oba, działają).
David Schwartz
Ok dzięki. -d ""wydaje się być najlepszą opcją.
Justin