Parámetros de URL de línea de comando CURL

186

Estoy tratando de enviar una DELETEsolicitud con un parámetro de URL usando CURL. Estoy haciendo:

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

Sin embargo, el servidor no ve el parámetro id = 3. Intenté usar alguna aplicación GUI y cuando paso la URL como:, http://localhost:5000/locations?id=3funciona. Realmente preferiría usar CURL en lugar de esta aplicación GUI. ¿Alguien puede señalar lo que estoy haciendo mal?

cielo oscuro
fuente

Respuestas:

269

encabezado "application / x-www-form-urlencoded", ¿por qué? Pruébalo:

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

o

curl -X GET 'http://localhost:5000/locations?id=3'
felipsmartins
fuente
30
Funcionó. Me acabo de dar cuenta de que la URL tiene que estar entre comillas para aceptar parámetros. Ese tipo MIME es para una URL con parámetros y eso es lo que usa la aplicación GUI. Además, no quiero hacer GET. Quiero DELETEy no, GETy estoy tratando de seguir los estándares de diseño REST adecuados, así que estoy usando DELETE y no GET al eliminar.
oscuro
1
En mi caso, solo funciona con comillas dobles, con comillas simples en curl dice: (1) El protocolo 'http no es compatible o está deshabilitado en libcurl, pero con "" las comillas funcionan bien.
Jeff_Alieffson
150

Felipsmartins es correcto.

Vale la pena mencionar que se debe a que realmente no puede usar la opción -d / - data si no se trata de una solicitud POST. Pero esto todavía es posible si usa la opción -G.

Lo que significa que puedes hacer esto:

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

Aquí es un poco tonto, pero cuando estás en la línea de comando y tienes muchos parámetros, es mucho más ordenado.

Lo digo porque los comandos de cURL suelen ser bastante largos, por lo que vale la pena hacerlo en más de una línea escapando de los saltos de línea.

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

Obviamente, esto es mucho más cómodo si usa zsh. Quiero decir cuando necesitas volver a editar el comando anterior porque zsh te permite ir línea por línea. (solo digo)

Espero eso ayude.

Mig
fuente
11
Salvavidas! ¡Gracias hombre! Tengo un script donde quiero usar --data-urlencode en un GET. Esto hizo que no tuviera que codificar manualmente mis parámetros. ¡Gracias!
Nathan Wallace el
3
¿Estás insinuando que -X DELETE -G es realmente una solicitud POST?
Huggie
1
`-G, --get Coloque los datos de publicación en la URL y use GET` No, solo agrega los datos de publicación a la url, -X [método] tiene prioridad (fuente: curl --help y experiencia)
DownloadPizza
¿Cómo puede ser esto tan complicado? Se podría suponer que --data-urlencode agrega los datos a la URL sin excepciones, pero ahora debe combinarlos --getpara que realmente funcione.
Jaakko