Каков параметр границы в многостраничном HTTP-запросе (POST)?

Я пытаюсь разработать гаджет боковой панели, который автоматизирует процесс проверки веб-страницы на предмет изменения моей квоты на перевод. Я почти готов, но мне нужно сделать еще один шаг, чтобы заставить его работать: отправка HttpRequest с правильными данными POST на страницу php. Используя плагин firefox, вот как выглядит «Content-Type» заголовка:

Content-Type=multipart/form-data; boundary=---------------------------99614912995

с параметром "граница", кажущимся случайным, а POSTDATA - это:

POSTDATA =-----------------------------99614912995
Content-Disposition: form-data; name="SOMENAME"

Formulaire de Quota
-----------------------------99614912995
Content-Disposition: form-data; name="OTHERNAME"

SOMEDATA
-----------------------------99614912995--

Я не понимаю, как правильно эмулировать POSTDATA с возвращением загадочного "пограничного" параметра.

Кто-нибудь знает, как я могу это решить?


person m6a-uds    schedule 21.02.2010    source источник
comment
вы нашли решение этого? Как отправить такие поля, как SOMENAME, OTHERNAME, с помощью curl?   -  person Pavan Jiwnani    schedule 08.02.2015
comment
Мой опыт решения подобной проблемы приведен [здесь] [1] [1]: stackoverflow.com/questions/31774695/   -  person Kiran Joshi    schedule 04.08.2015


Ответы (3)


Параметр границы установлен на количество дефисов плюс случайная строка в конце, но вы можете установить любое значение. Проблема в том, что если граничная строка появляется в данных запроса, она будет рассматриваться как граница.

Некоторые советы и пример функции для отправки multipart / form-data см. В моем ответе на этот вопрос. Не будет слишком сложно изменить эту функцию, чтобы использовать цикл для каждой части, которую вы хотите отправить.

person Andy E    schedule 21.02.2010
comment
Спасибо! Это помогло мне приблизиться к своей цели! Пока не работает, но это проясняет ;-) - person m6a-uds; 22.02.2010
comment
Примечание. Content-Length следует изменить при изменении границы. - person K3rnel31; 16.04.2014

Цитируя RFC 1341, раздел 7.2.1, то, что я считаю соответствующие биты в параметре boundary заголовка Content-Type (для MIME):

Все подтипы multipart имеют общий синтаксис ...

Для поля Content-Type для составных сущностей требуется один параметр, «граница», который используется для указания границы инкапсуляции. Граница инкапсуляции определяется как строка, состоящая полностью из двух знаков дефиса («-», десятичный код 45), за которыми следует значение параметра границы из поля заголовка Content-Type.

а затем уточняет:

Таким образом, типичное составное поле заголовка Content-Type может выглядеть так:

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p

Это указывает на то, что объект состоит из нескольких частей, каждая из которых имеет структуру, синтаксически идентичную сообщению RFC 822, за исключением того, что область заголовка может быть полностью пустой, и что каждой части предшествует строка --gc0p4Jq0M2Yt08jU534c0p

На заметку:

  1. Граница инкапсуляции должна находиться в начале строки, то есть после CRLF (перевод строки возврата каретки)
  2. За границей должны сразу следовать либо другой CRLF и поля заголовка для следующей части, либо два CRLF, и в этом случае нет полей заголовка для следующей части (и поэтому предполагается, что это текст Content-Type / простой).
  3. Границы инкапсуляции не должны появляться внутри инкапсуляций и не должны быть длиннее 70 символов, не считая двух ведущих дефисов.

Последний, но тем не менее важный:

Граница инкапсуляции, следующая за последней частью тела, является выделенным разделителем, который указывает, что за ней не последуют никакие другие части тела. Такой разделитель идентичен предыдущим разделителям с добавлением еще двух дефисов в конце строки:

 --gc0p4Jq0M2Yt08jU534c0p-- 

Я надеюсь, что это поможет кому-то еще в будущем, так как мне пришлось некоторое время бродить, прежде чем получить полную картину (пожалуйста, не забудьте прочитать необходимые RFC, чтобы получить самое глубокое понимание).

person nemesisfixx    schedule 07.06.2012
comment
Примечание. Content-Length следует изменить при изменении границы. - person K3rnel31; 16.04.2014
comment
Я думаю, что граница используется для отделения разных частей, а не для обозначения длины. - person Rugal; 04.10.2015

Фактическая спецификация для multipart / form-data находится в RFC 7578. Граница определяется в разделе 4.1.

person Julian Reschke    schedule 21.02.2010