Come fare una richiesta PUT con arricciatura?


412

Come testare un metodo RESTful PUT (o DELETE) usando l'arricciatura?

Risposte:


566

Usando la -Xbandiera con qualunque verbo HTTP tu voglia:

curl -X PUT -d arg=val -d arg2=val2 localhost:8080

Questo esempio usa anche il -dflag per fornire argomenti con la tua richiesta PUT.


17
"man curl" su -X: "Normalmente non hai bisogno di questa opzione. Tutti i tipi di richieste GET, HEAD, POST e PUT sono piuttosto invocati usando le opzioni dedicate della riga di comando." Ma non sono riuscito a trovare un altro modo.
Martin C. Martin,

44
Un anno dopo, ho trovato un modo! curl -T
Martin C. Martin

2
Poiché la risposta di Martin C. Martin cambia anche in GET dopo un reindirizzamento dal server, questa è la risposta più utile secondo me.
Martin,

2
Per ottenere il GETdopo un reindirizzamento, aggiungi il parametro--location
Martin M

1
Curl 7.47 e questo non funzionerebbe per me. La risposta di theabraham è sempre predefinita per post comportamento. --get (o -G) tuttavia forzerà i campi -d (--data) a diventare parametri url e funziona.
James Powell,

101

Risposta rapida:

In una sola riga, il comando arricciatura sarebbe:

a) Se si inviano i dati del modulo:

curl -X PUT -H "Content-Type: multipart/form-data;" -F "key1=val1" "YOUR_URI"

b) Se si inviano dati grezzi come json:

curl -X PUT -H "Content-Type: application/json" -d '{"key1":"value"}' "YOUR_URI"

c) Se si invia un file con una richiesta POST:

curl -X POST "YOUR_URI" -F 'file=@/file-path.csv'

Soluzione alternativa:

Puoi utilizzare l' app POSTMAN dal Chrome Store per ottenere l'equivalente richiesta cURL. Ciò è particolarmente utile quando si scrivono richieste più complicate.

Per la richiesta con altri formati o per client diversi come Java, PHP, puoi dare un'occhiata a POSTMAN / commento qui sotto.

POSTMAN per ottenere il codice di richiesta


4
Non ho idea del perché questo sia stato sottoposto a downvoting ... Ho copiato qui l'idea di come passare il corpo JSON per arricciare PUT. Anche il postino è uno strumento davvero fantastico per ottenere il codice arricciato per domande più complicate :)
Mikael Lepistö

2
Grazie !! Anche io non ho idea del perché dei voti negativi. Potrebbe essere riluttanza degli utenti ad adottarlo. Ho creato un respo di tutte le mie API REST per dispositivi mobili in POSTMAN e questo è il miglior consiglio di produttività che posso suggerire a chiunque lavori con REST.
Prateek,

Esempio del mondo reale in cui sto passando i dati json e il parametro nel punto finale; curl -X PUT -H "Content-Type: application / json" -d '{"amount": "999", "type": "car", "parent_id": "12345"}' localhost: 8080 / transazioni di servizio / transazione / 2222
vikramvi,

1
Dover installare un browser completo (se non si dispone di Chrome) e un'estensione potrebbe essere eccessivo per alcune persone. Almeno avresti potuto fornire un'alternativa per un altro browser più comune (installazione predefinita) come Firefox, in cui HttpRequester svolge un lavoro simile.
rbaleksandar,

5
Potrebbe essere sottovalutato perché la domanda riguarda l'arricciatura.
tuxayo,

28

Un esempio PUT che segue il commento di Martin C. Martin:

curl -T filename.txt http://www.example.com/dir/

Con -T(uguale a --upload-file) curl utilizzerà PUT per HTTP.


8
Sfortunatamente, -Tnon è un sostituto per -X PUTse si desidera specificare i parametri con -do -F. -Tinvia il contenuto di un file tramite PUT. Per ottenere il GETdopo un reindirizzamento, aggiungi il parametro--location
Martin M

cosa succede se nomefile.txt si trova nel server remoto?
bosari,

7
curl -X PUT -d 'new_value' URL_PATH/key

dove,

X: opzione da utilizzare per il comando di richiesta

d - opzione da utilizzare per inserire i dati nell'URL remoto

URL_PATH - URL remoto

new_value - valore che vogliamo mettere nella chiave del server


5

Sono in ritardo su questa discussione, ma anch'io avevo un requisito simile. Poiché il mio script stava costruendo la richiesta di arricciatura in modo dinamico, volevo una struttura simile del comando tra GET, POST e PUT.

Ecco cosa funziona per me

Per richiesta PUT :

curl --request PUT --url http://localhost:8080/put --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

Per richiesta POST :

curl --request POST --url http://localhost:8080/post --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

Per la richiesta GET :

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
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.