POST XML file using cURL command line
How can I POST an XML file to a local server http://localhost:8080
using cURL from the command line?
What command should I use?
If that question is connected to your other Hudson questions use the command they provide. This way with XML from the command line:
$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
You need to change it a little bit to read from a file:
$ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Read the manpage. following an abstract for -d Parameter.
-d/--data
(HTTP) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to -F/--form.
-d/--data is the same as --data-ascii. To post data purely binary, you should instead use the --data-binary option. To URL-encode the value of a form field you may use --data-urlencode.
If any of these options is used more than once on the same command line, the data pieces specified will be merged together with a separating &-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post chunk that looks like 'name=daniel&skill=lousy'.
If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. The contents of the file must already be URL-encoded. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with --data @foobar.
From the manpage, I believe these are the droids you are looking for:
-F/--form <name=content>
(HTTP) This lets curl emulate a filled-in form in which a user has pressed the submit button. This causes curl to POST data using the Content-Type multipart/form-data according to RFC2388. This enables uploading of binary files etc. To force the 'content' part to be a file, prefix the file name with an @ sign.
Example, to send your password file to the server, where 'password' is the name of the form-field to which /etc/passwd will be the input:
curl -F password=@/etc/passwd www.mypasswords.com
So in your case, this would be something likecurl -F file=@/some/file/on/your/local/disk http://localhost:8080