Как отправить MIME через HTTP? - PullRequest
0 голосов
/ 23 декабря 2010

Мне нужно отправить определенные данные на сервер в архиве .zip, по HTTP-запросу POST, в MIME-кодировке.Я так понимаю, это означает только то, что мне нужно указать MIME-тип в заголовке запроса.Но я не совсем понимаю, что мне следует указывать в теле запроса.До сих пор я видел два способа сделать это:

  1. Обычно, как я понимаю (извините, я не веб-кодер, так что вроде как не работает с HTTP), тело запроса POSTсостоит из пар имя_параметра = некоторые + данные, разделенные на '&'.Должен ли я сделать то же самое и записать содержимое моего файла в base64 в один из параметров?Это также позволило бы мне предоставить дополнительные параметры.

  2. Или я должен просто заполнить тело POST содержимым моего файла (в base64, верно?)?Если да, есть ли способ предоставить дополнительную информацию о файле?

Является ли только один из этих способов приемлемым или оба?Если это так, что было бы наилучшей практикой?

Кроме того, пример кода на C ++ для Qt был бы очень-очень признателен, но совершенно не обязателен:)

1 Ответ

2 голосов
/ 05 февраля 2011

Полное тело ключ = значение в запросах POST предназначено только для отправки данных формы на ваш сервер. Если вы хотите отправить POST только содержимое файла .zip, вы можете просто отправить его как тело вашего POST, не нужно настраивать его, как форму сообщения, как вы описываете. Вы можете установить следующие заголовки в запросе:

Content-Type: application/zip
Content-Disposition: attachment; filename=myzip.zip

Вам даже не обязательно кодировать тело с помощью base64, хотя вам следует это делать, если именно этого ожидает ваш сервер.

Content-Disposition - это то, что вам нужно, чтобы подробнее описать загрузку вашего файла. Вы можете найти некоторые подробности об этом здесь:

http://en.wikipedia.org/wiki/MIME#Content-Disposition

и здесь

http://www.ietf.org/rfc/rfc2183.txt

На стороне сервера вам просто нужно написать некоторый код, который получит тело ответа во всей его полноте (что довольно просто, хотя YMMV зависит от языка и структуры), и обрабатывать его так, как вы хотите.

В качестве примера из реального мира вы можете найти, например, AtomPub, как это делается:

http://bitworking.org/projects/atom/rfc5023.html

...