¿Cómo hacer una solicitud PUT con curl?

412

¿Cómo pruebo un método RESTful PUT (o DELETE) usando curl?

Juan
fuente

Respuestas:

566

Usando la -Xbandera con cualquier verbo HTTP que desee:

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

Este ejemplo también usa el -dindicador para proporcionar argumentos con su solicitud PUT.

theabraham
fuente
17
"man curl" en -X: "Normalmente no necesita esta opción. Se invocan todo tipo de solicitudes GET, HEAD, POST y PUT utilizando opciones de línea de comandos dedicadas". Pero no pude encontrar otra manera.
Martin C. Martin
44
¡Un año después, encontré un camino! curl -T
Martin C. Martin
2
Como la respuesta de Martin C. Martin también cambia a GET después de una redirección desde el servidor, esta es la respuesta más útil en mi opinión.
Martin
2
Para lograr GETdespués de una redirección, agregue el parámetro--location
Martin M
1
Curl 7.47 y esto no funcionaría para mí. La respuesta de theabraham siempre se predetermina al comportamiento de publicación. --get (o -G) sin embargo forzará a los campos -d (--data) a convertirse en parámetros de URL y funciona.
James Powell
101

Respuesta rápida:

En una sola línea, el comando curl sería:

a) Si envía datos del formulario:

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

b) Si envía datos sin procesar como json:

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

c) Si envía un archivo con una solicitud POST:

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

Solución alternativa:

Puede usar la aplicación POSTMAN de Chrome Store para obtener la solicitud de cURL equivalente. Esto es especialmente útil al escribir solicitudes más complicadas.

Para la solicitud con otros formatos o para diferentes clientes como Java, PHP, puede consultar POSTMAN / comentario a continuación.

POSTMAN para obtener el código de solicitud

Prateek
fuente
44
No tengo idea de por qué esto ha sido rechazado ... Copié aquí la idea de cómo pasar el cuerpo JSON para curl PUT. También cartero es una herramienta bastante impresionante para obtener código de rizo para consultas más complicadas :)
Mikael Lepistö
2
Gracias !! Incluso no tengo idea de por qué los votos negativos. Podría ser renuencia de los usuarios a adoptarlo. He creado un respo de todas mis apis REST para dispositivos móviles en POSTMAN y ese es el mejor consejo de productividad que puedo sugerir a cualquiera que trabaje con REST.
Prateek
Ejemplo del mundo real donde paso datos y parámetros json en el punto final; curl -X PUT -H "Tipo de contenido: application / json" -d '{"amount": "999", "type": "car", "parent_id": "12345"}' localhost: 8080 / connectionservice / transacción / 2222
vikramvi
1
Tener que instalar un navegador completo (si uno no tiene Chrome) y una extensión para él podría ser una exageración para algunas personas en mi humilde opinión. Al menos podría haber proporcionado una alternativa para otro navegador web más común (instalación predeterminada) como Firefox, donde HttpRequester hace un trabajo similar.
rbaleksandar
55
Podría ser rechazado porque la pregunta es sobre el rizo.
tuxayo
28

Un ejemplo PUT siguiendo el comentario de Martin C. Martin:

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

Con -T(igual que --upload-file) curl usará PUT para HTTP.

Tor Klingberg
fuente
8
Desafortunadamente, -Tno es un sustituto -X PUTsi desea especificar parámetros con -do -F. -Tenvía el contenido de un archivo a través de PUT. Para lograr GETdespués de una redirección, agregue el parámetro--location
Martin M
¿Qué pasa si filename.txt está en el servidor remoto?
bosari
7
curl -X PUT -d 'new_value' URL_PATH/key

dónde,

X: opción que se utilizará para el comando de solicitud

d: opción que se utilizará para colocar datos en la URL remota

URL_PATH - URL remota

new_value: valor que queremos poner en la clave del servidor

kalyani chaudhari
fuente
5

Llego tarde a este hilo, pero yo también tenía un requisito similar. Como mi script estaba construyendo la solicitud de curl dinámicamente, quería una estructura similar del comando en GET, POST y PUT.

Esto es lo que funciona para mí.

Para solicitud PUT :

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

Para solicitud POST :

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

Para solicitar GET :

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
sunitkatkar
fuente