2010-02-21 2 views
54

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

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 с возвращаемым параметром тайны «граница».

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

+0

Вы нашли решение этого? Как отправить такие поля, как SOMENAME, OTHERNAME, используя curl? –

+0

Мой опыт с подобной проблемой перечислен [здесь] [1] [1]: http://stackoverflow.com/questions/31774695/using-multipart-without-form-in-spring-mvc –

ответ

35

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

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

+0

Спасибо! Это помогло мне приблизиться к моей цели! –

+3

Примечание: Content-Length следует изменить при изменении границы – K3rnel31

+0

Это очень помогло мне :) – wayzz

4

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

69

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

Все подтипы «многочастному» имеют общий синтаксис ...

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

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

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

Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p 

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

Чем Примечание:

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

И последнее, но не менее важное:

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

--gc0p4Jq0M2Yt08jU534c0p-- 

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

+2

Примечание: Content-Length следует изменить, когда смените границу – K3rnel31

+0

Я думаю граница используется для разделения различной части, не указывая длину. – Rugal

+1

Кстати, этот ответ замечательный !!! – Rugal