Parametri URL della riga di comando CURL


186

Sto cercando di inviare una DELETErichiesta con un parametro url utilizzando CURL. Sto facendo:

curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3'

Tuttavia, il server non vede il parametro id = 3. Ho provato a utilizzare alcune applicazioni GUI e quando passo l'URL come:, http://localhost:5000/locations?id=3funziona. Preferirei piuttosto usare CURL piuttosto che questa applicazione GUI. Qualcuno può sottolineare cosa sto facendo di sbagliato?

Risposte:


269

Intestazione "application / x-www-form-urlencoded", perché? Provalo:

curl -X DELETE 'http://localhost:5000/locations?id=3'

o

curl -X GET 'http://localhost:5000/locations?id=3'

30
Ha funzionato. Ho appena realizzato che l'URL deve essere tra virgolette per accettare i parametri. Quel tipo MIME è per un URL con parametri ed è quello che utilizza l'applicazione GUI. Inoltre, non voglio fare GET. Voglio DELETEe non GETsto provando a seguire gli standard di progettazione REST corretti, quindi sto usando DELETE e non GET durante l'eliminazione.
darksky,

1
Nel mio caso funziona solo con virgolette doppie, con virgolette singole in dice curl: (1) Il protocollo 'http non è supportato o disabilitato in libcurl Ma con "" la quotazione funziona bene.
Jeff_Alieffson,

150

Felipsmartins è corretto.

Vale la pena ricordare che è perché non è davvero possibile utilizzare l'opzione -d / - data se questa non è una richiesta POST. Ma questo è ancora possibile se si utilizza l'opzione -G.

Ciò significa che puoi farlo:

curl -X DELETE -G 'http://localhost:5000/locations' -d 'id=3'

Qui è un po 'sciocco, ma quando sei sulla riga di comando e hai molti parametri, è molto più ordinato.

Lo dico perché i comandi cURL sono in genere piuttosto lunghi, quindi vale la pena farlo su più di una riga per evitare le interruzioni di riga.

curl -X DELETE -G \
'http://localhost:5000/locations' \
-d id=3 \
-d name=Mario \
-d surname=Bros

Questo ovviamente è molto più comodo se usi zsh. Voglio dire quando è necessario modificare nuovamente il comando precedente perché zsh ti consente di andare riga per riga. (solo dicendo)

Spero che sia d'aiuto.


11
Salvavita! Grazie uomo! Ho uno script in cui voglio usare --data-urlencode su un GET. Questo ha reso così non ho bisogno di url codificare manualmente i miei parametri. Grazie!
Nathan Wallace,

3
Stai insinuando che -X ELIMINA -G è davvero una richiesta POST?
Huggie,

1
`-G, --get Inserisci i dati dei post nell'URL e usa GET` No, aggiunge semplicemente i dati dei post all'URL, -X [metodo] ha la precedenza (fonte: curl - aiuto ed esperienza)
DownloadPizza

Come può essere così contorto. Si potrebbe supporre che --data-urlencode aggiunga i dati all'URL senza eccezioni, ma ora è necessario combinarli con quelli --getper farlo funzionare davvero.
Jaakko,
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.