Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: m6a-udsОтветов: 3

Я пытаюсь разработать гаджет боковой панели, который автоматизирует процесс проверки веб-страницы на предмет изменения моей квоты на перевод. Я почти готов, но мне нужно сделать еще один шаг, чтобы заставить его работать: отправка 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 с возвращением загадочного "пограничного" параметра.

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

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

httpxmlhttprequestmultipartform-datamime-types

Ответы

Ответ 1 · рейтинг 43 · Andy E

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

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

Ответ 2 · рейтинг 82 · nemesisfixx

Цитируя Content-TypeMultipart.html" rel="noreferrer">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, чтобы получить самое глубокое понимание).

Ответ 3 · рейтинг 6 · Julian Reschke

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы