Полезная информация

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№105-05-2010 15:54:46

KML
Участник
 
Группа: Extensions
Откуда: Днепропетровск
Зарегистрирован: 01-06-2005
Сообщений: 422
UA: Firefox 3.6

Отправить multipart/form-data при помощи XMLHttpRequest

Вот такой код формирует  телол запроса, идентичное тому, что отправляется по сабмиту формы. Я сравнивал два 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);

:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0

Отсутствует

 

№205-05-2010 19:26:17

KML
Участник
 
Группа: Extensions
Откуда: Днепропетровск
Зарегистрирован: 01-06-2005
Сообщений: 422
UA: Firefox 3.6

Re: Отправить multipart/form-data при помощи XMLHttpRequest

KML пишет

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

Отсутствует

 

№327-05-2010 15:31:09

Zeiss
Участник
 
Группа: Members
Откуда: Киев
Зарегистрирован: 28-01-2010
Сообщений: 7
UA: IE 7.0

Re: Отправить multipart/form-data при помощи XMLHttpRequest

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

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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]