What is the cURL command-line syntax to do a POST request?

How can I make a POST request with the cURL command-line tool?

Super User Asked by Laurie Young on November 22, 2021

7 Answers

7 Answers

If you are lazy, you can get google-chrome or firefox to do all the work for you.

  1. Right-click the form you want to submit and select Inspect (or Inspect Element for Firefox). This will open the DevTools panel.
  2. Select the Network tab in devtools and tick the Preserve log checkbox (Persist Logs for firefox).
  3. Submit the form and locate the entry with method POST (right-click on any column header and make sure Method is checked).
  4. Right click the line with POST, and select Copy > Copy as cURL.

chrome devtools: copy as cURL

Chrome will copy all the request data in cURL syntax.

Chrome uses --data 'param1=hello&param2=world' which you can make more readable by using a single -d or -F per parameter depending on which type of POST request you want to send, which can be either application/x-www-form-urlencoded or multipart/form-data accordingly.

This will be POST-ed as application/x-www-form-urlencoded (used for the majority of forms that don't contain file uploads):

    -H "User-Agent: Mozilla/2.2" 
    -d param1=hello 
    -d name=dinsdale

For a multipart/form-data POST use -F (typically used with forms that contain file uploads, or where order of fields is important, or where multiple fields with the same name are required):

    -H "User-Agent: Mozilla/2.2" 
    -F param1=hello 
    -F name=dinsdale 
    -F name=piranha

The User-Agent header is not normally needed, but I've thrown it in just in case. If you need a custom agent then you can avoid having to set it on every request by creating the ~/.curlrc file which contains e.g. User-Agent: "Mozilla/2.2"

Answered by ccpizza on November 22, 2021

Data from stdin with -d @-


echo '{"text": "Hello **world**!"}' | curl -d @-


<p>Hello <strong>world</strong>!</p>

Answered by Ciro Santilli 新疆再教育营六四事件法轮功郝海东 on November 22, 2021

If you want to login to a site, do the following:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

The first request saves the session cookie (that is provided upon successful login) in the "headers" file. From now on you can use that cookie to authenticate you to any part of the website that you usually access after logging in with a browser.

Answered by Martin Konecny on November 22, 2021

For a RESTful HTTP POST containing XML:

curl -X POST -d @filename.txt --header "Content-Type:text/xml"

or for JSON, use this:

curl -X POST -d @filename.txt --header "Content-Type:application/json"

This will read the contents of the file named filename.txt and send it as the post request.

Answered by soundmonster on November 22, 2021

With fields:

curl --data "param1=value1&param2=value2"

With fields specified individually:

curl --data "param1=value1" --data "param2=value2"


curl --form "[email protected]"

Multipart with fields and a filename:

curl --form "[email protected];filename=desired-filename.txt" --form param1=value1 --form param2=value2

Without data:

curl --data ''
curl -X POST

curl --request POST

For more information see the cURL manual. The cURL tutorial on emulating a web browser is helpful.

With libcurl, use the curl_formadd() function to build your form before submitting it in the usual way. See the libcurl documentation for more information.

For large files, consider adding parameters to show upload progress:

curl --tr-encoding -X POST -v -# -o output -T filename.dat

The -o output is required, otherwise, no progress bar will appear.

Answered by Stephen Deken on November 22, 2021

curl -v --data-ascii var=value

and there are many more options, check curl --help for more information.

Answered by Vinko Vrsalovic on November 22, 2021

curl -d "name=Rafael%20Sagula&phone=3320780" 

is the example found in the Curl Example Manual.

Use %26 for the ampersands though if the above doesn't work:

curl -d "name=Rafael%20Sagula%26phone=3320780" 

Answered by Patrick Desjardins on November 22, 2021

Add your own answers!

Related Questions

Ask a Question

Get help from others!

© 2021 All rights reserved.