I want to send the output of uptime and df commands to a web app using cURL. I tried:

uptime | curl http://someurl.com -T -

But that didn't seem to send the data.

What is the proper way to send the output of a command to cURL as a POST parameter? (or wget if that's much easier)

  • did you attempt to use the redirector for stdout > not a pipe |? Also take a look at xargs.
    – mbrownnyc
    Sep 20 '11 at 20:07
  • Look this is described in the manual of curl: curl.haxx.se/docs/manpage.html#-d Or in the manual of wget (under --post-data=string): gnu.org/software/wget/manual/wget.html#HTTP-Options
    – mailq
    Sep 20 '11 at 20:15
  • When you say "as a POST parameter", do you mean you need it to be as if you typed in your uptime in a field (with a name) on a form and pressed submit, or as if you saved your uptime to a file, then used a file upload field to select the file, then pressed submit? These are two different ways of POSTing data. -T with http[s]:// uses PUT, not POST.
    – DerfK
    Sep 20 '11 at 20:50
  • @DerfK Yes, I'd like it to be as if I pasted the uptime results into a textarea field and it was POSTed to a URL.
    – Callmeed
    Sep 20 '11 at 21:03

You can use the -d option in curl with a @- argument to accept input from a pipe. You will need to construct the key-value pairs yourself. Try this:

echo "time=`uptime`" | curl -d @- http://URL

The backticks (`) denote that the enclosed command (in this case uptime) should be executed, and the backtick-quoted text replaced with the output of the executed command.

  • 4
    If the output of the command includes linebreaks (like df) you might want to use curl --data-binary @- URL or in newer versions of curl: uptime | curl --data-urlencode time@- URL
    – xebeche
    Apr 2 '13 at 18:51

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.