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.

Roy Hinkley
fuente

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

Jeffrey Froman
fuente
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
cocina
fuente
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
wbswjc
fuente