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


¿Cómo puedo hacer un ENVIAR solicitud con el rizo herramienta de línea de comandos?


2055


origen




Respuestas:


Con campos:

curl --data "param1=value1&param2=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 cURL. los tutorial cURL sobre la emulación de un navegador web es útil.

Con libcurl, use el curl_formadd() función para construir su formulario antes de enviarlo de la manera habitual. Ver el Documentación de libcurl para más información.

Para archivos grandes, considere agregar parámetros para mostrar el progreso de carga:

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

los -o output es obligatorio, de lo contrario no aparecerá ninguna barra de progreso.


2385



@LauriRanta --data-urlencode (sin guiones), en versiones recientes al menos - waitinforatrain
También funciona si necesita actualizar un recurso con un PUT: curl -X PUT ... - Subfuzion
Tengo problemas para entender ... ¿cuándo lo haría? With Fieldscuando con Multipart y cuando Without Data? - CodyBugstein
En lugar de --data puedes usar -d. - user35538
tengo una variedad de campos ¿Cómo puedo hacer esto? - ARUNBALAN NV


Para un POST HTTP RESTful que contenga XML:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

o para JSON, usa 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 enviarlo como la solicitud posterior.


480



@ tom-wijsman explicación: curl -X POST implica una solicitud HTTP POST, la -d parámetro (versión larga: --data) le dice a curl que lo que sigue serán los parámetros POST, y @filename designa el contenido del archivo filename como parámetro. Este enfoque funciona mejor con RESTful API API que se encuentra en Twitter, Facebook, otros servicios web, incluido Ruby on Rails, así como API API de bases de datos como CouchDB. REST significa Transferencia de estado representacional - soundmonster
¿Cómo podemos ver la respuesta xml no en una línea pero formateada? - Vitaly Zdanevich
Creo que puedes dejar el -X POST ya que eso está implícito en -d. - benjifisher
Cómo dar múltiples encabezados? - keya
Varios encabezados: curl -H "encabezado2: 1" -H "encabezado2: 2" ... - Tomáš Kratochvíla


Datos de stdin: utilizar -d @-. Ejemplo:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Salida:

<p>Hello <strong>world</strong>!</p>

118



Genial si ya tienes un objeto JSON en el portapapeles - Luca Steeb
aún mejor: echo "$ message" | curl -H "Content-Type: application / json" -d @ - "$ url" - rzr


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

es el ejemplo que se encuentra en el Curl Example Manual.

Sin embargo, use% 26 para los signos y si lo anterior no funciona:

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

64





Si desea iniciar sesión en un sitio, haga lo siguiente:

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

La primera solicitud guarda la cookie de sesión (que se proporciona con el inicio de sesión correcto) en el archivo "encabezados". A partir de ahora, puede usar esa cookie para autenticarse en cualquier parte del sitio web al que acceda habitualmente después de iniciar sesión con un navegador.


57



una nota de la página man de curl: 'La opción -c, --cookie-jar es, sin embargo, una mejor manera de almacenar cookies'. - maxschlepzig


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

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


31





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. Selecciona el Red tab en devtools y marque la Conservar registro caja.
  3. Envíe el formulario y ubique la entrada con el método POST (haga clic derecho en el encabezado de cualquier columna y asegúrese Método está chequeado).
  4. Haga clic derecho en la línea con POST, y seleccione Dupdo > Copiar como cURL.

chrome devtools: copy as cURL

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

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

Esto será PUBLICADO 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 multipart/form-data POST uso -F (normalmente se usa con formularios que contienen cargas de archivos, o cuando el orden de los campos es importante, o cuando 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

los User-Agent el encabezado 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 ~/.curlrc archivo que contiene, por ejemplo, User-Agent: "Mozilla/2.2"


16