POST di arricciatura - Lunghezza 411 richiesta


29

Abbiamo un'API RestFUL che costruiamo in PHP. Se facciamo la richiesta:

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

Torniamo:

411 - Length Required

Tuttavia, se aggiungiamo semplicemente -d ""alla richiesta, funziona e nessun errore 411. C'è un modo per non richiedere l'aggiunta di -d al comando curl?

Stiamo usando il web server lighttpd e crediamo che il suo lighttpd NON php chi sta restituendo l'errore 411.

Risposte:


47

Hai ragione: lighttpd non supporta le richieste POST con un corpo di messaggio vuoto senza un'intestazione "Content-Length" impostata su zero e CURL invia tale richiesta. C'è argomento avanti e indietro su chi ha ragione, ma a mio avviso, lighttpd è rotto. Un POST senza lunghezza contenuto e nessuna codifica di trasferimento è perfettamente legale e non ha un corpo di messaggio.

L'aggiunta -d ""causa CURL per inviare Content-Length: 0un'intestazione, che risolve il problema.

È possibile modificare lighttp. Trova il codice che genera l'errore 411 e imposta invece la lunghezza del contenuto su zero.


Grazie per l'ottima spiegazione, quindi non c'è alcuna bandiera da passare per arricciare oltre -d ""o una direttiva di configurazione lighttpd da impostare? -d ""sembra solo un trucco.
Justin,

1
È un trucco. Se vuoi risolvere il problema davvero, dovresti modificare lighttpd. Puoi invece usarlo -d @/dev/nullse pensi che abbia un aspetto migliore. Puoi anche usare -H "Content-Length: 0". (Ho provato entrambi, funzionano.)
David Schwartz,

Ok grazie. -d ""sembra essere l'opzione migliore.
Justin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.