curl -GET y -X GET


126

Curl ofrece una serie de diferentes llamadas a métodos http con el prefijo X, pero también ofrece los mismos métodos sin. He probado ambos y parece que no puedo entender la diferencia. ¿Alguien puede explicarme rápidamente en qué se diferencian estas dos operaciones?

Respuestas:


263

De forma predeterminada, usa curl sin decir explícitamente qué método de solicitud usar. Si solo pasa una URL HTTP como curl http://example.com, usará GET. Si usa -do -Fcurl usará POST, -Icausará un HEAD y -Tlo convertirá en PUT.

Si por alguna razón no está satisfecho con estas opciones predeterminadas que curl hace por usted, puede anular esos métodos de solicitud especificando -X [WHATEVER]. De esta forma puede, por ejemplo, enviar un DELETE haciendo curl -X DELETE [URL].

Por lo tanto, no tiene sentido hacer curl -X GET [URL]lo que se usaría GET de todos modos. En la misma línea, no tiene sentido hacerlo. curl -X POST -d data [URL]...Pero puede hacer una solicitud divertida y algo rara que envíe un cuerpo de solicitud en una solicitud GET con algo como curl -X GET -d data [URL].

Cavar más profundo

curl -GET(usando un solo guión) es simplemente incorrecto para este propósito. Eso es el equivalente a especificar las opciones -G, -Ey -Ty eso hará algo completamente diferente.

También hay una opción de curl llamada --getpara no confundir las cosas con ninguno de los dos. Es la forma larga de -G, que se utiliza para convertir los datos especificados con -den una solicitud GET en lugar de POST.

(Posteriormente utilicé mi propia respuesta aquí para completar las preguntas frecuentes de curl para cubrir esto ).

Advertencias

Las versiones modernas de curl informarán a los usuarios sobre este uso innecesario y potencialmente dañino de -X cuando el modo detallado está habilitado ( -v) - para que los usuarios estén al tanto. Más explicado y motivado en esta publicación de blog .

-G convierte un cuerpo POST + en una consulta GET +

Puede pedirle a curl que convierta un conjunto de -dopciones y, en lugar de enviarlas en el cuerpo de la solicitud con POST, colóquelas al final de la cadena de consulta de la URL y emita un GET, con el uso de `-G. Me gusta esto:

curl -d name=daniel -d grumpy=yes -G https://example.com/

5
-XGET puede no ser operativo, pero lo hace explícito.
mtyson

"De forma predeterminada, usa curl sin decir explícitamente qué método de solicitud usar. Si solo pasa una URL HTTP como curl example.com , usará GET. Si usa -d o -F curl usará POST, -I causaré un HEAD y -T lo convertirán en un PUT ". Todo lo que necesitas saber.
Donato

4
Explícito es mejor que implícito siempre que tenga la opción. Falla temprano, falla rápido, reduce accidentes, reduce el tiempo de depuración. La única vez que tiene una excusa para omitirlo es cuando lo escribe en la línea de comando. Cualquier script debe especificar -XGET incluso cuando sea estrictamente innecesario.
Backgammon

1
@Backgammon, si lo hacen, lo están haciendo mal. Pero seguro que pueden.
Daniel Stenberg

2

-X [su método]
X le permite anular el 'Obtener' predeterminado

** corregido de minúsculas xa mayúsculasX


2
Esto ni siquiera intenta responder a la pregunta "en qué se diferencian estas dos operaciones".
Melebio

1

El uso de -X [WHATEVER]simplemente cambia la cadena de método de la solicitud utilizada en la solicitud HTTP. Esto es más fácil de entender con dos ejemplos, uno con -X [WHATEVER]y otro sin, y los encabezados de solicitud HTTP asociados para cada uno:

# 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: */*
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.