Вот такой код формирует  телол запроса, идентичное тому, что отправляется по сабмиту формы. Я сравнивал два POST Data (RAW) которые получил при помощи HttpFox.
В RAW режиме они совпадают один в один, но поведение HttpFox отличается - тело POST запроса отправленного из формы не отображается в Pretty Print режиме, а тело моего POST запроса частично отображается.
Сервер не обрабатывает мой POST, хотя и возвращает 200 (доступа к серверу у меня нет).
Похоже, я формирую тело запроса не совсем корректно, но где собака порылась - не пойму. :sick:

Выделить код

Код:

var addAdReq = new XMLHttpRequest();
addAdReq.open('POST', postAdUrl, false);
addAdReq.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
var stringStream = Components.classes["@mozilla.org/io/string-input-stream;1"].createInstance(Components.interfaces.nsIStringInputStream);
var data = "";
data += boundary;
data += "\r\n";
data += 'Content-Disposition: form-data; name="category_id"\r\n\r\n';
data += categoryId;
data += "\r\n";
data += boundary;
data += "\r\n";
.......[и т.д.].......
data += boundary;
data += "--\r\n";
stringStream.setData(data, data.length);
addAdReq.send(stringStream);
KML пишет

addAdReq.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);

Нашел ошибку, в хедере строка boundary должна содержать на два символа '-' меньше чем в остальных случаях.

Я как раз над аналогичной задачей на днях работал (отправка файлов вместе со значениями формы), может, следующие моменты окажутся полезными:
- Использую формат Unix: \n
- Из-за не решаемых нормально проблем с отслеживанием редиректов и прогресса отправки, отказался от XMLHttpRequest  в пользу nsIHttpChannel.
- Корректная обработка запроса в ASP.NET зависит от правильного заголовка Content-Length в POST запросе. Сервер не дожидается закрывающего boundary, если значение Content-Length меньше реального.

Кстати (этим досужим вопросом пока не занимался), можно ли компрессировать POST-данные, установив Content-Encoding: gzip?