So basically, I'm trying to write a series of scripts to interact with Dot Net Nuke. I've been analysing the traffic and can now login and do some basic tasks. However, I've never handled binary file upload with curl. Would someone be willing to look at this to help me out? Here's the anatomy of the request:
http://pastebin.com/qU8ZEMaQ
Here's what I've got for curl so far:
http://pastebin.com/LG2ubFZG
edit: For the lazy -
length of the file is achieved and stored in LENGTH
STUFF is just a copy/paste of the request URL with parameters, minus the URL itself.
curl -L --cookie ~/.cms --data-binary "@background.jpg" \
--header "Content-Length: $LENGTH" \
--header "Content-Disposition: form-data" \
--header "name=\"RadFileExplorer1_upload1file0\"" \
--header "Content-Type: image/jpg" \
--header "Filename=\"background.jpg\"" \
--data $STUFF \
--referer "Kept-Secret" \
"Kept-Secret"
You don't need --header "Content-Length: $LENGTH".
curl --request POST --data-binary "@template_entry.xml" $URL
Note that GET request does not support content body widely.
Also remember that POST request have 2 different coding schema. This is first form:
$ nc -l -p 6666 &
$ curl --request POST --data-binary "@README" http://localhost:6666
POST / HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
Host: localhost:6666
Accept: */*
Content-Length: 9309
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
.. -*- mode: rst; coding: cp1251; fill-column: 80 -*-
.. rst2html.py README README.html
.. contents::
You probably request this:
-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. To just get the content part from a
file, prefix the file name with the symbol <. The
difference between @ and < is then that @ makes a
file get attached in the post as a file upload,
while the < makes a text field and just get the
contents for that text field from a file.