Enviar POST Solicitud con los Datos Especificados en el Archivo a través de Curl


Necesito hacer una solicitud POST vía Curl desde la línea de comandos. Los datos de esta solicitud se encuentran en un archivo. Sé que via PUT esto podría hacerse con la opción --upload-file.

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"
Author: w43L, 2011-06-20

4 answers

Estás buscando el argumento --data-binary:

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"

En el ejemplo anterior, -i imprime todos los encabezados para que puedas ver lo que está pasando, y -X POST hace explícito que esto es un post. Ambos se pueden omitir de forma segura sin cambiar el comportamiento del cable. La ruta al archivo debe ir precedida por un símbolo @, de modo que curl sepa leer de un archivo.

 221
Author: Richard J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-18 22:54:15

Necesito hacer una solicitud POST vía Curl desde la línea de comandos. Los datos de esta solicitud se encuentran en un archivo...

Todo lo que necesita hacer es que el argumento --data comience con un @:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file -path

Por ejemplo, si tienes los datos en un archivo llamado stuff.xml entonces harías algo como:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path

El nombre de archivo stuff.xml se puede reemplazar por una ruta relativa o completa al archivo: @../xml/stuff.xml, @/var/tmp/stuff.xml, ...

 14
Author: Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-09 13:23:36

Si está utilizando datos de formulario para cargar un archivo, en el que se debe especificar un nombre de parámetro, puede usar:

curl -X POST -i -F parametername=@filename host:port/xxx

 8
Author: Lucas Liu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-05 10:32:20

La mayoría de las respuestas son perfectas aquí, pero cuando aterricé aquí para mi problema particular, tengo que cargar binary file (hoja de cálculo XLSX) usando POST, veo una cosa que falta , es decir, generalmente no es solo el archivo que carga, es posible que tenga más elementos de datos de formulario , me gusta comment to file or tags to file etc como fue mi caso. Por lo tanto, me gustaría agregarlo aquí, ya que era mi caso de uso, para que pudiera ayudar a otros.

curl POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url
 0
Author: Red Boy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-03 11:08:35