Страницы: 1
Вот такой код формирует телол запроса, идентичное тому, что отправляется по сабмиту формы. Я сравнивал два POST Data (RAW) которые получил при помощи HttpFox.
В RAW режиме они совпадают один в один, но поведение HttpFox отличается - тело POST запроса отправленного из формы не отображается в Pretty Print режиме, а тело моего POST запроса частично отображается.
Сервер не обрабатывает мой POST, хотя и возвращает 200 (доступа к серверу у меня нет).
Похоже, я формирую тело запроса не совсем корректно, но где собака порылась - не пойму.
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);
:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
Отсутствует
addAdReq.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
Нашел ошибку, в хедере строка boundary должна содержать на два символа '-' меньше чем в остальных случаях.
:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
Отсутствует
Я как раз над аналогичной задачей на днях работал (отправка файлов вместе со значениями формы), может, следующие моменты окажутся полезными:
- Использую формат Unix: \n
- Из-за не решаемых нормально проблем с отслеживанием редиректов и прогресса отправки, отказался от XMLHttpRequest в пользу nsIHttpChannel.
- Корректная обработка запроса в ASP.NET зависит от правильного заголовка Content-Length в POST запросе. Сервер не дожидается закрывающего boundary, если значение Content-Length меньше реального.
Кстати (этим досужим вопросом пока не занимался), можно ли компрессировать POST-данные, установив Content-Encoding: gzip?
Отсутствует
Страницы: 1