I am using cURL command line utility to send HTTP POST to a web service. I want to include a file's contents as the body entity of the POST. I have tried using -d </path/to/filename>
as well as other variants with type info like --data </path/to/filename> --data-urlencode </path/to/filename>
etc... the file is always attached. I need it as the body entity.
I believe you're looking for the @filename
syntax, e.g.:
strip new lines
curl --data "@/path/to/filename" http://...
keep new lines
curl --data-binary "@/path/to/filename" http://...
curl will strip all newlines from the file. If you want to send the file with newlines intact, use --data-binary
in place of --data
I know the question has been answered, but in my case I was trying to send the content of a text file to the Slack Webhook api and for some reason the above answer did not work. Anywho, this is what finally did the trick for me:
curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX
curl: argument list too long
in that case accepted answer is life saver curl --data "@/path/to/filename" http://...
In my case, @
caused some sort of encoding problem, I still prefer my old way:
curl -d "$(cat /path/to/file)" https://example.com
curl https://upload.box.com/api/2.0/files/3300/content -H "Authorization: Bearer $access_token" -F file=@"C:\Crystal Reports\Crystal Reports\mysales.pdf"
Success story sharing
cat file.txt | curl --data "@-" `(< url.txt )`
@-
tells curl to read from stdin. You could also just use the redirect(< x.txt )
to put in whatever you want. If you're using bash.--data-binary
in place of--data
.name:value
pairs, like a username and password, then add the necessary headers that match what the service is expecting:--header: "<header_name>:<header_value>"
as a single string.