desarrollo-web-br-bd.com

¿Cuál es la sintaxis de línea de comandos de cURL para hacer una solicitud POST?

¿Cómo puedo hacer una solicitud POST con la herramienta de línea de comandos cURL ?

2175
Laurie Young

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

With fields specified individually:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Multipart:

curl --form "[email protected]" https://example.com/resource.cgi

Multipart with fields and a filename:

curl --form "[email protected];filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Without data:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

For more information see the cURL manual . The cURL tutorial on emulating a web browser is helpful.

With libcurl, use the curl_formadd() function to build your form before submitting it in the usual way. See the libcurl documentation for more information.

For large files, consider adding parameters to show upload progress:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

The -o output is required, otherwise no progress bar will appear.

2488
Stephen Deken

Para un RESTful HTTP POST que contiene 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 la solicitud posterior.

503
soundmonster

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 símbolos de sin embargo si lo anterior no funciona:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 
66
Patrick Desjardins

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

The first request saves the session cookie (that is provided upon successful login) in the "headers" file. From now on you can use that cookie to authenticate you to any part of the website that you usually access after logging in with a browser.

59
Martin Konecny
curl -v --data-ascii var=value http://example.com

y hay muchas más opciones, consulte curl --help para obtener más información.

32
Vinko Vrsalovic

Si eres flojo, puedes hacer que google-chrome haga todo el trabajo por ti.

  1. Haga clic con el botón derecho en el formulario que desea enviar y seleccione Inspeccionar . Esto abrirá el panel DevTools.
  2. Seleccione la pestaña Red en devtools y marque la casilla de verificación Conservar registro .
  3. Envíe el formulario y localice la entrada con el método POST (haga clic con el botón derecho en cualquier encabezado de columna y asegúrese de que Método esté marcado).
  4. Haga clic derecho en la línea con POST y seleccione Copiar > Copiar como cURL .

chrome devtools: copy as cURL

Chrome copiará todos los datos de la solicitud en sintaxis de cURL.

Chrome utiliza --data 'param1=hello&param2=world' que puede hacer más legible utilizando un solo -d o -F por parámetro, dependiendo del tipo de solicitud de [POST que desee enviar, que puede ser application/x-www-form-urlencoded o multipart/form-data en consecuencia.

Esto se PUBLICARÁ como application/x-www-form-urlencoded ( utilizado para la mayoría de los formularios que no contienen cargas 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 cargas de archivos, o donde el orden de los campos es importante, o donde múltiples campos con se requiere 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 normalmente no es necesario, pero lo he lanzado por si acaso. Puede evitar tener que configurar el agente de usuario en cada solicitud creando el archivo ~/.curlrc que contiene, p. User-Agent: "Mozilla/2.2"

25
ccpizza