¿Cuál es la sintaxis de la línea de comando cURL para hacer una solicitud POST?
¿Cómo puedo hacer una solicitud POST con la herramienta de línea de comando cURL ?
Con campos:
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
Con campos especificados individualmente:
curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi
Multiparte:
curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi
Multiparte con campos y un nombre de archivo:
curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi
Sin datos:
curl --data '' https://example.com/resource.cgi
curl -X POST https://example.com/resource.cgi
curl --request POST https://example.com/resource.cgi
Para más información ver el manual de cURL. El tutorial de cURL sobre la emulación de un navegador web es útil.
Con libcurl, use la función curl_formadd()
para construir su formulario antes de enviarlo de la manera habitual. Vea la documentación de libcurl para más información.
Para archivos grandes, considere agregar parámetros para mostrar el progreso de la carga:
curl --tr-encoding -X POST -v -# -o output -T filename.dat \
http://example.com/resource.cgi
El -o output
es necesario, de lo contrario no aparecerá ninguna barra de progreso.
Para un RESTful HTTP POST que contenga XML:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"
o para JSON, use esto:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"
Esto leerá el contenido del archivo llamado filename.txt
y lo enviará como solicitud de correo.
Datos de stdin con -d @-
Ejemplo:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
Salida:
<p>Hello <strong>world</strong>!</p>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
es el ejemplo que se encuentra en el Curl Example Manual .
Use %26 para los ampersands aunque si lo anterior no funciona:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
La primera solicitud guarda la cookie de sesión (que se proporciona al iniciar la sesión con éxito) en el archivo de “encabezados”. A partir de ahora puedes usar esa cookie para autentificarte en cualquier parte del sitio web al que accedas habitualmente después de iniciar sesión con un navegador.
curl -v --data-ascii var=value http://example.com
y hay muchas más opciones, revisa curl --help
para más información.
Si eres perezoso, puedes conseguir que Google Chrome o Firefox hagan todo el trabajo por ti.
Chrome copiará todos los datos de la solicitud en la sintaxis de la cURL.
Chrome utiliza --data 'param1=hello¶m2=world'
que puede hacer más legible utilizando un solo -d
o -F
por parámetro dependiendo del tipo de solicitud POST que quiera enviar, que puede ser application/x-www-form-urlencoded
o multipart/form-data
en consecuencia.
Esto será POST-ed como application/x-www-form-urlencoded
(utilizado para la mayoría de los formularios que no contienen subidas de archivos):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-d param1=hello \
-d name=dinsdale
Para un multipart/form-data
POST use -F
(típicamente usado con formularios que contienen subidas de archivos, o donde el orden de los campos es importante, o donde se requieren múltiples campos con el mismo nombre):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-F param1=hello \
-F name=dinsdale \
-F name=piranha
El encabezado User-Agent
no se necesita normalmente, pero lo he puesto por si acaso. Si necesitas un agente personalizado, puedes evitar tener que configurarlo en cada solicitud creando el archivo ~/.curlrc
que contiene, por ejemplo, User-Agent: "Mozilla/2.2"