Paramètres d'URL de ligne de commande CURL

186

J'essaye d'envoyer une DELETEdemande avec un paramètre d'url en utilisant CURL. Je fais:

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

Cependant, le serveur ne voit pas le paramètre id = 3. J'ai essayé d'utiliser une application GUI et quand je passe l'url en tant que:, http://localhost:5000/locations?id=3cela fonctionne. Je préférerais vraiment utiliser CURL plutôt que cette application GUI. Quelqu'un peut-il indiquer ce que je fais de mal?

ciel sombre
la source

Réponses:

269

En-tête "application / x-www-form-urlencoded", pourquoi? Essaye le:

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

ou

curl -X GET 'http://localhost:5000/locations?id=3'
Felipsmartins
la source
30
Ça a marché. Je viens de réaliser que l'URL doit être entre guillemets pour accepter les paramètres. Ce type MIME est pour une URL avec des paramètres et c'est ce que l'application GUI utilise. Aussi, je ne veux pas faire GET. Je veux DELETEet non GETet j'essaie de suivre les normes de conception REST appropriées, donc j'utilise DELETE et non GET lors de la suppression.
sombre du
1
Dans mon cas, cela ne fonctionne qu'avec des guillemets doubles, avec des guillemets simples dans dit curl: (1) Protocole 'http non pris en charge ou désactivé dans libcurl Mais avec "" la citation fonctionne très bien.
Jeff_Alieffson
150

Felipsmartins a raison.

Il est à noter que c'est parce que vous ne pouvez pas vraiment utiliser l'option -d / - data s'il ne s'agit pas d'une requête POST. Mais cela est toujours possible si vous utilisez l'option -G.

Ce qui signifie que vous pouvez faire ceci:

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

Ici, c'est un peu idiot mais lorsque vous êtes sur la ligne de commande et que vous avez beaucoup de paramètres, c'est beaucoup plus ordonné.

Je dis cela parce que les commandes cURL sont généralement assez longues, donc cela vaut la peine de le faire sur plus d'une ligne en échappant aux sauts de ligne.

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

C'est évidemment beaucoup plus confortable si vous utilisez zsh. Je veux dire quand vous devez rééditer la commande précédente parce que zsh vous permet d'aller ligne par ligne. (juste en disant)

J'espère que ça aide.

Mig
la source
11
Sauveur de vie! Merci mec! J'ai un script où je veux utiliser --data-urlencode sur un GET. Cela fait que je n'ai pas à encoder manuellement mes paramètres. Merci!
Nathan Wallace
3
Voulez-vous dire que -X DELETE -G est vraiment une requête POST?
huggie
1
`-G, --get Mettez les données de publication dans l'URL et utilisez GET` Non, il ajoute simplement les données de publication à l'url, -X [méthode] a la priorité (source: curl --help and experience)
DownloadPizza
Comment cela peut-il être si compliqué? On pourrait supposer que --data-urlencode ajoute les données à l'URL sans exception, mais maintenant vous devez les combiner avec --getpour que cela fonctionne réellement.
Jaakko