How to POST file contents using cURL?

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:

  1. Extract the contents of the file my-file.txt as a string.
  2. URL encode the string.
  3. 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?

1

3 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 @.

6

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" 

The manual reference is here.

Also see this SE answer and this one also for multi-parts.

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like