237 votes

Paramètres URL de la ligne de commande CURL

J'essaie d'envoyer un DELETE avec un paramètre url en utilisant CURL. Je suis en train de faire :

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 lorsque je passe l'url comme : http://localhost:5000/locations?id=3 , cela fonctionne. Je préférerais vraiment utiliser CURL plutôt que cette application GUI. Quelqu'un peut-il m'indiquer ce que je fais mal ?

345voto

felipsmartins Points 1525

En application/x-www-form-urlencoded L'en-tête Content-type n'est pas nécessaire (enfin, ça dépend). Sauf si le gestionnaire de la demande attend des paramètres provenant du corps du formulaire. Essayez-le :

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

o

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

47 votes

Cela a fonctionné. Je viens de réaliser que l'URL doit être entre guillemets pour accepter des paramètres. Ce type MIME est destiné à une URL avec des paramètres et c'est ce que l'application GUI utilise. De plus, je ne veux pas faire GET . Je veux DELETE et non GET et j'essaie de respecter les normes de conception REST, j'utilise donc DELETE et non GET pour la suppression.

3 votes

Dans mon cas, cela ne fonctionne qu'avec une double citation, avec une simple citation, curl : (1) Protocol 'http not supported or disabled in libcurl Mais avec la citation "", cela fonctionne très bien.

0 votes

Je suis actuellement dans un environnement Windows. L'utilisation de guillemets simples n'a pas fonctionné pour moi. J'ai obtenu une erreur du type " 'http' not supported ". Cependant, cela a fonctionné lorsque je les ai inclus dans des guillemets doubles.

204voto

Mig Points 101

@Felipsmartins est correcte.

Il est utile de préciser 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 reste possible si vous utilisez l'option -G.

Ce qui signifie que vous pouvez le faire :

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

Ici, c'est un peu idiot mais quand on est sur la ligne de commande et qu'on a beaucoup de paramètres, c'est beaucoup plus ordonné.

Je dis cela parce que les commandes cURL sont généralement assez longues, et qu'il vaut donc la peine de les faire sur plus d'une ligne en évitant les 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 avez besoin de rééditer la commande précédente parce que zsh vous permet d'aller ligne par ligne. (je dis ça comme ça)

13 votes

Une bouée de sauvetage ! Merci à toi ! J'ai un script où je veux utiliser --data-urlencode sur un GET. Cela m'a permis de ne pas avoir à coder manuellement mes paramètres en url. Merci de votre compréhension.

4 votes

Voulez-vous dire que -X DELETE -G est en réalité une requête POST ?

1 votes

` -G, --get Mettre les données du message dans l'URL et utiliser GET` Non, il ajoute juste les données du message à l'URL, -X [méthode] est prioritaire (source : curl --help and experience)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X