I want to do an HTTP POST of the contents (as a string) of a local file located at path/to/my-file.txt to a URL endpoint at .
For example, I might want to do the following:
- Extract the contents of the file
my-file.txtas a string. - URL encode the string.
- Store the encoded string as a variable named
foo.
Then do something like this:
curl -d "data=foo" (I don't actually need the foo variable. It's just a convenient way to describe my question.)
What are the commands I would need to execute this? Do I need to write a shell script? If so, how might it look?
13 Answers
According to the last section of -d in man curl:
If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. Multiple files can also be specified. Posting data from a file named foobar would thus be done with --data @foobar. When --data is told to read from a file like that, carriage returns and newlines will be stripped out.
That is you don't have to do anything fancy just prepend your filename with a @.
As mentioned in this related question if you want the file uploaded without any changes (curl defaults to stripping carriage-return/line-feed characters) then you may want to use the --data-binary option:
curl -X POST --data-binary @path/to/my-file.txt 2 To be explicitly clear, the accepted answer suggests:
curl -d "data=@path/to/my-file.txt" Also see this SE answer and this one also for multi-parts.
2