Search code examples
httpcurlhttp-postcommand-line-interface

Send request to cURL with post data sourced from a file


I need to make a POST request via cURL from the command line. Data for this request is located in a file. I know that via PUT this could be done with the --upload-file option.

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"

Solution

  • You're looking for the --data-binary argument:

    curl -i -X POST host:port/post-file \
      -H "Content-Type: text/xml" \
      --data-binary "@path/to/file"
    

    In the example above, -i prints out all the headers so that you can see what's going on, and -X POST makes it explicit that this is a post. Both of these can be safely omitted without changing the behaviour on the wire. The path to the file needs to be preceded by an @ symbol, so curl knows to read from a file.