This one had me confused for quite a while, simply I wanted to do a PUT in Adobe Air to my Plone site. Something that you think would be quite easy but somehow all I got were errors. The problem turned out to be I was doing an upload, when it should have been uploadUnencoded which has a slightly different signature.
function uploadFile(file) {
// an internal function to get our upload url
var url = getPref("url");
// an internal function to get the file name for the PUT
var urlRequest = new air.URLRequest(url + "/" + fileFromPath(file.url));
var headers = new Array()
// an internal function to get the Plone security cookie
headers.push(new air.URLRequestHeader("Cookie", "__ac=" + getPref("cookie")));
// an internal function to get the file extension
headers.push(new air.URLRequestHeader("Content-Type", extensionFromFile(file)));
urlRequest.requestHeaders = headers;
urlRequest.method = air.URLRequestMethod.PUT;
file.addEventListener(air.ProgressEvent.PROGRESS, uploadProgress);
file.addEventListener(air.Event.COMPLETE, uploadComplete);
file.addEventListener(air.SecurityErrorEvent.SECURITY_ERROR, uploadError);
file.addEventListener(air.HTTPStatusEvent.HTTP_STATUS, uploadError);
file.addEventListener(air.IOErrorEvent.IO_ERROR, uploadError);
file.uploadUnencoded(urlRequest);
}