POST Form Data with cURL

By  on  

cURL is the magical utility that allows developers to download a URL's contentexplore response headers, get stock quotes, confirm our GZip encoding is working, and much more.  One more great usage of cUrl for command line is POSTing form data to a server, especially while testing moderate to advanced form processing.  And just like other cURL commands, POSTing form data is incredibly simple.

POSTing Form Data with cURL

Start your cURL command with curl -X POST and then add -F for every field=value you want to add to the POST:

curl -X POST -F 'username=davidwalsh' -F 'password=something' http://domain.tld/post-to-me.php

If you were using PHP, you could use print_r on the $_POST variable to see that your server received the POST data as expected:

Array(
  'username' => 'davidwalsh',
  'password' => 'something'
)

If you need to send a specific data type or header with cURL, use -H to add a header:

# -d to send raw data
curl -X POST -H 'Content-Type: application/json' -d '{"username":"davidwalsh","password":"something"}' http://domain.tld/login

POSTing Files with cURL

POSTing a file with cURL is slightly different in that you need to add an @ before the file location, after the field name:

curl -X POST -F 'image=@/path/to/pictures/picture.jpg' http://domain.tld/upload

Using PHP to explore the $_FILES variable array would show file data as though it was uploaded via a form in browser:

Array(
  "image": array(
    "name" => "picture.jpg"
    "type" => "image/jpeg",
    "tmp_name" => "/path/on/server/to/tmp/phprj5rkG",
    "error" => 0,
    "size" => 174476
  )
)

POSTing file contents with cURL is Probably easier than you thought, right?

The first time I needed to POST file data from command line I thought I was in for a fight; instead I found that cURL made the process easy!

Recent Features

  • By
    CSS Animations Between Media Queries

    CSS animations are right up there with sliced bread. CSS animations are efficient because they can be hardware accelerated, they require no JavaScript overhead, and they are composed of very little CSS code. Quite often we add CSS transforms to elements via CSS during...

  • By
    5 Ways that CSS and JavaScript Interact That You May Not Know About

    CSS and JavaScript:  the lines seemingly get blurred by each browser release.  They have always done a very different job but in the end they are both front-end technologies so they need do need to work closely.  We have our .js files and our .css, but...

Incredible Demos

  • By
    Element Position Swapping Using MooTools 1.2

    We all know that MooTools 1.2 can do some pretty awesome animations. What if we want to quickly make two element swap positions without a lot of fuss? Now you can by implementing a MooTools swap() method. MooTools 1.2 Implementation MooTools 1.2 Usage To call the swap...

  • By
    Image Manipulation with PHP and the GD Library

    Yeah, I'm a Photoshop wizard. I rock the selection tool. I crop like a farmer. I dominate the bucket tool. Hell, I even went as far as wielding the wizard wand selection tool once. ...OK I'm rubbish when it comes to Photoshop.

Discussion

  1. zhat

    Very nice artice.! But can you explaint more about different from -d option and -F option in cURL.
    I was read in manual cURL is -d stand for --data, data when send to form will be endcode. But with -F ( stand for form ), it was really be encode ?
    Sorry my english.

  2. Ron

    Ok, I’m working with some hardware, which has an IP address “10.10.12.105”, I can download the file in “*.html” format and view the information. This information is in a table, and now I want to manually edit the information in the table and the upload the revised table back to my hardware.

    My cURL Code line for Downloading the file is:

    curl -o Camera_xw220.html http://root:Qwe16Sa7@10.10.12.105/oidtable.html
    

    My Revised File is located in

    C:\Users\123098765\Desktop\Camera_ff220-u.html
    

    How do I use the cURL to upload my revised “html” file, which is located on my PC?

  3. JL McKay

    Thanks for the article! I am posting this here because I scoured the internet for two days to track down an error I thought I had in curl and this is the top hit. It turned out that I never had an error – the -F and -d options both work fine. My problem was that I was pointing my curl POST request at a webpage, e.g., page.php, on which the only content was a form, form.php. Once I changed the request to point at form.php directly it worked like a charm. Dumb, silly error. Hope this saves someone else some time.

  4. Jin

    I keep on getting “curl: (35) error:0306E06C:bignum routines:BN_mod_inverse:no inverse”. Do you know how I can get around of this? Thanks

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!