159 votes

Curl -GET et -X GET

Curl propose une série d'appels de méthode HTTP différents qui sont préfixés par un X, mais propose également les mêmes méthodes sans. J'ai essayé les deux et je n'arrive pas à comprendre la différence. Est-ce que quelqu'un pourrait m'expliquer rapidement en quoi ces deux opérations diffèrent?

311voto

Daniel Stenberg Points 9116

Par défaut, vous utilisez curl sans spécifier explicitement la méthode de requête à utiliser. Si vous passez simplement une URL HTTP comme curl http://exemple.com, cela utilisera GET. Si vous utilisez -d ou -F, curl utilisera POST, -I provoquera un HEAD et -T le transformera en PUT.

Si, pour une raison quelconque, vous n'êtes pas satisfait de ces choix par défaut que curl fait pour vous, vous pouvez remplacer ces méthodes de requête en spécifiant -X [CE QUE VOUS VOULEZ]. Vous pouvez ainsi par exemple envoyer une requête DELETE en faisant curl -X DELETE [URL].

Il est donc inutile de faire curl -X GET [URL] car GET serait utilisé de toute façon. De même, il est inutile de faire curl -X POST -d données [URL] Mais vous pouvez faire une demande amusante et quelque peu rare qui envoie un corps de requête dans une demande GET avec quelque chose comme curl -X GET -d données [URL].

Aller plus loin

curl -GET (en utilisant un seul tiret) est tout simplement incorrect pour cette fin. C'est l'équivalent de spécifier les options -G, -E et -T et cela fera quelque chose de complètement différent.

Il y a aussi une option curl appelée --get pour ne pas embrouiller les choses avec la longue forme de -G, qui est utilisée pour convertir les données spécifiées avec -d en une requête GET au lieu d'une POST.

(J'ai ensuite utilisé ma propre réponse ici pour alimenter la FAQ curl afin de couvrir ce sujet.)

Avertissements

Les versions modernes de curl informeront les utilisateurs de cet usage inutile et potentiellement dangereux de -X lorsque le mode verbeux est activé (-v) - pour sensibiliser les utilisateurs. Plus amplement expliqué et motivé dans ce billet de blog.

-G convertit un POST + corps en un GET + requête

Vous pouvez demander à curl de convertir un ensemble d'options -d et au lieu de les envoyer dans le corps de la requête avec POST, de les mettre à la fin de la chaîne de requête de l'URL et d'émettre un GET, avec l'utilisation de `-G. Comme ceci:

curl -d nom=daniel -d grognon=oui -G https://exemple.com/

5 votes

-XGET peut être une opération sans effet, mais elle rend les choses explicites.

0 votes

"Par défaut, vous utilisez curl sans dire explicitement quelle méthode de requête à utiliser. Si vous passez simplement une URL HTTP comme curl example.com, il utilisera GET. Si vous utilisez -d ou -F, curl utilisera POST, -I provoquera un HEAD et -T le transformera en PUT." Tout ce que vous devez savoir.

6 votes

Explicit is better than implicit whenever you have the option. Fail early, fail fast, reduces accidents, reduces debug time. The only time you have an excuse for skipping it is when typing it into the command line. Any script should specify -XGET even when strictly unnecessary.

3voto

hoogw Points 1047

-X [votre méthode]
X vous permet de remplacer la méthode par défaut 'Get'

** corrigé minuscule x en majuscule X

3 votes

Cela ne tente même pas de répondre à la question "comment ces deux opérations diffèrent".

2voto

Jimadine Points 513

L'utilisation de -X [QUELQUE CHOSE] change simplement la chaîne de méthode de la requête utilisée dans la requête HTTP. Ceci est plus facile à comprendre avec deux exemples - un avec -X [QUELQUE CHOSE] et un sans - et les en-têtes de requête HTTP associées pour chacun :

# curl -XPANTS -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.224.86.126) port 80 (#0)
> PANTS / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*

# curl -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.33.50.167) port 80 (#0)
> GET / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*

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