Cómo enviar el contenido del archivo como entidad del cuerpo usando cURL


208

Estoy usando la utilidad de línea de comando cURL para enviar HTTP POST a un servicio web. Quiero incluir el contenido de un archivo como la entidad del cuerpo de la POST. He intentado usar -d </path/to/filename>así como otras variantes con información de tipo como --data </path/to/filename> --data-urlencode </path/to/filename>etc. El archivo siempre está adjunto. Lo necesito como entidad del cuerpo.

Respuestas:


339

Creo que está buscando la @filenamesintaxis, por ejemplo:

quitar nuevas líneas

curl --data "@/path/to/filename" http://...

mantener nuevas líneas

curl --data-binary "@/path/to/filename" http://...

=====

curl eliminará todas las nuevas líneas del archivo. Si desea enviar el archivo con líneas nuevas intactas, use --data-binaryen lugar de --data


21
Si quieres ser realmente elegante, puedes hacerlo: cat file.txt | curl --data "@-" `(< url.txt )` @-le dice a curl que lea desde stdin. También puedes usar la redirección (< x.txt )para poner lo que quieras. Si estás usando bash.
Breedly

62
curl eliminará todas las nuevas líneas del archivo. Si desea enviar el archivo con líneas nuevas intactas, use --data-binaryen lugar de --data.
Chris

ahora, ¿cómo agregaría credenciales de inicio de sesión para autorizar esta solicitud?
anon58192932

@ anon58192932 - Eso depende del protocolo de seguridad del servidor. Si está utilizando name:valuepares, como un nombre de usuario y una contraseña, agregue los encabezados necesarios que coincidan con lo que el servicio espera: --header: "<header_name>:<header_value>"como una sola cadena.
Roy Hinkley

19

Sé que la pregunta ha sido respondida, pero en mi caso estaba tratando de enviar el contenido de un archivo de texto a la API de Slack Webhook y, por alguna razón, la respuesta anterior no funcionó. De todos modos, esto es lo que finalmente hizo el truco para mí:

curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX

Este no convierte puntos en guiones bajos (. -> _) y mantiene nuevas líneas. ¡Gracias!
Ramon Fincken

1
Es genial, pero no responde la pregunta ya que el archivo se explota en la línea de comando en lugar de especificarse para curl. También me pregunto si todos los personajes especiales de la concha necesitan escapar, pero no sé lo suficiente sobre eso;)
Gerard ONeill

Gracias, me salvaste la vida!
Aryswisnu

Para un archivo de contenido enorme, el curl anterior no funcionará, curl: argument list too long en ese caso la respuesta aceptada es un salvavidascurl --data "@/path/to/filename" http://...
Otro codificador

0

En mi caso, @causó algún tipo de problema de codificación, todavía prefiero mi forma anterior:

curl -d "$(cat /path/to/file)" https://example.com
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.