Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

 Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p

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

Замечания:

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

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

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

 --gc0p4Jq0M2Yt08jU534c0p-- 

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

Ответ 3

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