14

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)

4
  • did you attempt to use the redirector for stdout > not a pipe |? Also take a look at xargs.
    – brandeded
    Sep 20, 2011 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, 2011 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, 2011 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, 2011 at 21:03

1 Answer 1

33

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.

1
  • 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, 2013 at 18:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .