application x www form urlencoded что это

Русские Блоги

Три формата кодирования для запросов Post: application / x-www-form-urlencoded и multipart / form-data и application / json

1. При отправке клиентской формы

application/x-www-form-urlencoded

В ходе тестирования выяснилось, что к интерфейсу можно получить обычный доступ. Как видно из инструментов разработчика Chrome, формат кодировки загрузки формы application/x-www-form-urlencoded (В заголовках запроса) формат параметра key=value&key=value 。

multipart/form-data

Затем, когда сервер использует multipart/form-data При получении запроса POST, как сервер знает начальную и конечную позиции каждого параметра?

Для загрузки файла также необходимо указать формат кодировки multipart/form-data 。

Если это проект Spring MVC, сервер может принять его multipart/form-data Введите параметры, но также настройте следующее в контексте весны,Проект SpringBoot не нужен

Мы можем смоделировать отправку формы через объект FormData и отправить данные с оригинальным XMLHttpRequest, чтобы мы могли просмотреть конкретный формат в инструменте разработки Chrome:

Во-вторых, при вызове кода интерфейса

1. Используйте в коде application/x-www-form-urlencoded Параметр формата кодирования Запрос атрибута вызова интерфейса может быть реализован следующим образом:

2. Используйте в коде multipart/form-data Когда формат кодирования установлен на свойство Request для вызова интерфейса, где boundary Значение может быть указано при установке Content-Type, чтобы сервер знал, как разделить параметры, которые он принимает. Вызовите интерфейс через следующий код:

Посредством отладки мы можем видеть, что значения dataOutputStream следующие:

3. При использовании Почтальона для тестирования интерфейса

1. POST-запрос-> Body-> x-www-form-urlencoded

При переключении на x-www-form-urlencoded Заголовки будут добавлены автоматически Content-Type:application/x-www-form-urlencoded

2. POST-запрос-> Body-> form-data

Эквивалентно HTML-запросу формы, значением может быть текст или файл.

Вы не можете указать формат кодировки вручную, или вы можете указать кодировку как multipart/form-data

Разделительная линия в подчеркивании должна быть опущена.

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

Java OK HTTP

JavaScript Jquery AJAX

JavaScript XHR

Код интерфейса

Два формата кодирования для запросов POST: application/x-www-urlencoded Используется ли браузером формат кодировки по умолчанию, используемый для параметров пары ключ-значение, используемых между параметрами & интервал; multipart/form-data Обычно используется для двоичных файлов и т. Д., А также может использоваться для параметров пары ключ-значение и, наконец, подключается как строка символов для передачи (см. Java OK HTTP).

В дополнение к этим двум форматам кодирования, есть application/json Также часто используется.

application/json Метод вызова выглядит следующим образом:

а) Использовать httpClient

б) Или записать данные прямо в поток

приложение / получение JSON Способ заключается в следующем:

Источник

Отправка данных HTML-формы в веб-API ASP.NET: данные Form-UrlEncoded

Часть 1. форма-UrlEncoded данных

В этой статье показано, как опубликовать данные формы-UrlEncoded в контроллере веб-API.

Общие сведения о HTML-формах

Для отправки данных на сервер в HTML-формах используется либо GET, либо POST. Атрибут method элемента Form предоставляет метод HTTP:

Обратите внимание, что атрибут Action в форме является универсальным кодом ресурса (URI) действия контроллера. Ниже приведена форма с некоторыми значениями, введенными в:

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

Отправка данных формы через AJAX

Когда пользователь отправляет форму, браузер переходит от текущей страницы и отображает текст ответного сообщения. Это нормально, когда ответ является HTML-страницей. Однако в веб-API текст ответа обычно либо пуст, либо содержит структурированные данные, такие как JSON. В этом случае имеет смысл отправить данные формы с помощью запроса AJAX, чтобы страница могла обработать ответ.

В следующем коде показано, как отправлять данные формы с помощью jQuery.

Отправка простых типов

В предыдущих разделах мы отправили сложный тип, который веб-API десериализует в экземпляр класса Model. Можно также отправить простые типы, например строку.

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

По умолчанию веб-API пытается получить простые типы из универсального кода ресурса (URI) запроса. Атрибут FromBody сообщает веб-API о необходимости считывания значения из текста запроса.

Веб-API считывает текст ответа не более одного раза, поэтому в тексте запроса может быть только один параметр действия. Если необходимо получить несколько значений из текста запроса, определите сложный тип.

Во вторых, клиенту необходимо отправить значение в следующем формате:

В частности, часть имени пары «имя-значение» для простого типа должна быть пустой. Не все браузеры поддерживают это для HTML-форм, но этот формат создается в скрипте следующим образом:

Ниже приведен пример формы.

Один и тот же подход можно использовать для отправки массива простых типов:

Читайте также:  что делать если кот поцарапал глубоко

Источник

Передача данных из скрипта методом POST

Последняя редакция 15.11.2010, добавлено описание отправки файлов методом POST.

В этой статье я расскажу как отправлять данные из php скрипта методом POST так, как это делает обычная html форма. Необходимость в этом может возникнуть для отправки данных как на свой сайт, так и на чужой. В примере используются стандартные функции php.

Первый вариант, отправка только переменных с помощью application/x-www-form-urlencoded.

Чтобы отправить переменные методом POST, нужно установить соединение с сервером и отправить в открытое соединение подобный текст:

POST /file.php HTTP/1.1 \r\n
Host: test.ru \r\n
Referer: test.ru \r\n
User-Agent: Opera \r\n
Content-Type: application/x-www-form-urlencoded \r\n
Content-Length: 20 \r\n
\r\n
var=test&var2=privet \r\n
\r\n

Как видите, принцип очень простой. Заголовки и тело запроса. В данном случае в теле находятся как раз переменные, которые передаются методом POST (var=test&var2=privet), внешне эти переменные выглядят как при обычной передаче методом GET по ссылке.
А теперь рассмотрим этот пример более подробно и сразу переложим его на PHP.

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

$data = «var=test&var2=privet» ;
В данном примере используются две переменные( var и var2 ), первая имеет значение » test » вторая » privet «. Можете продолжать список переменных, разделяя их символом `&`.

$out = «POST /file.php HTTP/1.1\n» ; // здесь указываем какой файл запрашиваем и какой метод передачи данных будет использован. В данном примере вызывается файл file.php. Здесь нужно указывать путь до файла от корневой директории сайта (/path/file.php)

Итак, соединение с хостом открыто.
Передаем открытому соединению созданные данные:

А вот и полный листинг:

Это был самый простой пример, в нем я показал только принцип отправки данных.
Сейчас расширю данный пример, для демонстрации отправки данных методом POST и GET одновременно и получения ответа от сервера.

В этом примере файл file.php получил переменные:
GET var = «23» и var2 = «54»
POST var3 = «test» и var4 = «еще тест»

Хочу обратить ваше внимание, данные передаваемые через POST или GET всегда передаются строкой(string), независимо от того, через форму они передаются или через скрипт.
Поэтому передавая число, помните, что в скрипт оно попадет как string.

Второй вариант отправки данных, с помощью multipart/form-data для отправки файлов.

POST /file.php HTTP/1.0\ r\n
Host: test.ru \r\n
Referer: test.ru \r\n
Content-type: multipart/form-data, boundary=ccf8111910 \r\n
Content-length: 333 \r\n
\r\n
—ccf8111910 \r\n
Content-Disposition: form-data; name=»mass[qwe]» \r\n
\r\n
значение переменной mass[qwe] \r\n
—ccf8111910 \r\n
Content-Disposition: form-data; name=»var» \r\n
\r\n
значение переменной var \r\n
—ccf8111910 \r\n
Content-Disposition: form-data; name=»var_file»; filename=»a.txt» \r\n
Content-Type: text/plain \r\n
\r\n
содержимое файла \r\n
—ccf8111910— \r\n

В данном примере передаются переменные mass[qwe] и var, а так же текстовый файл a.txt, имеющий имя в форме var_file

В первую очередь обратите внимание на заголовок Content-type: multipart/form-data, boundary=ccf8111910. Именно multipart/form-data дает право пересылать не только текстовые значения переменных, но и файлы.
Так же в этой строке указывается разделитель данных boundary=. Это любой набор цифр или символов и будет служить для отделения значений друг от друга. Значение boundary должно быть уникальным в пределах пересылаемой информации, то есть таких символов не должно встречаться в пересылаемых файлах или переменных.
Все остальные заголовки точно такие же, как при отправке первым методом описаным в начале статьи.

После заголовков пошли данные. Все данные отделяются друг от друга разделителем boundary, который придумали и объявили в заголовках.
Начинать разделитель нужно с ««.

—ccf8111910
Content-Disposition: form-data; name=»mass[qwe]»

значение переменной
Так пересылается одна переменная с именем mass[qwe], в даном случае даже массив.
Далее можно перечислять таким же способом переменные и файлы, отделяя их друг от друга разделителями.

Для отправки файла нужно добавить еще тип и имя файла

—ccf8111910
Content-Disposition: form-data; name=»var_file»; filename=»a.txt»
Content-Type: text/plain

В конце перечисления файлов и переменных нужно закрыть разделитель, добавив в конце разделителя «»
—ccf8111910—

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

Сейчас покажу как этот пример реализовать на php

Комментарии

06.06.2007 Андрей
Благодарю. какраз нужно было.

09.06.2007 Виктор
Отличная статья

21.08.2007 Димон
То что нужно. Полезная штука. Огромное спасибо.

Читайте также:  с каким знаком зодиака совместим дева мужчина лучше всего подходит

24.10.2007 Антон
Огромное спасибо. Инфа полезная, но долго не мог найти в инете ничего с примерами.

22.11.2007 Андрей
Большое спасибо, только что искал нечто подобное )))

23.11.2007 Ярослав
Спасибо) То что нужно.

26.11.2007 Javad
Спасибо,давно такое искал.

29.12.2007 Vik
отлично большое спасибо
то что искал

10.05.2008 ScREW
Порезались символы переноса строки »
«. Куда-то потерялся слэш.

11.07.2008 GDP
слэш по-моему тут нашли все ))))
Огромное спасибо за мануал. В отличии от того, что представлено на PHP.net данный ман сработал

11.07.2008 Lewik
Спасибо огромное, особенно за массив через GET POST!

23.07.2008 clgs
не чего интересно не увидел. не понимаю восхищения.

07.08.2008 Сергей
Спасибо, с удовольствием подпишусь на вашу рассылку)

28.09.2008 TROLL
ТО ЧТО НУЖНО.

Источник

В чем разница между form-data, x-www-form-urlencoded и raw в приложении Postman Chrome?

3 ответов:

Это разные типы контента формы, определенные W3C. Если вы хотите отправить простой текст / ASCII данные, то x-www-form-urlencoded будет работать. Это значение по умолчанию.

но если вам нужно отправить не ASCII текст или большие двоичные данные, то форма-Сведения есть за что.

можно использовать Raw Если вы хотите отправить обычный текст или JSON или любой другой вид строки. Как следует из названия, почтальон отправляет ваши необработанные строковые данные, как это есть без варианта исполнения. Тип отправляемых данных можно задать с помощью заголовка content-type из раскрывающегося списка.

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

при построении запросов, вы будете иметь дело с редактором тела запроса много. Почтальон позволяет отправлять практически любой HTTP-запрос (если вы не можете отправить что-то, дайте нам знать!). Редактор тела разделен на 4 области и имеет различные элементы управления в зависимости от типа тела.

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

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

необработанный запрос может содержать что угодно. Postman не трогает строку, введенную в Редакторе raw, за исключением замены переменных среды. Что бы вы ни делали поместите в текстовую область отправляется с запросом. Редактор raw позволяет задать тип форматирования вместе с правильным заголовком, который следует отправить вместе с телом raw. Вы также можете установить заголовок типа содержимого вручную. Обычно вы отправляете данные XML или JSON здесь.

двоичные данные позволяют отправлять вещи, которые вы не можете ввести в почтальон. Например, изображения, аудио или видео файлы. Вы также можете отправлять текстовые файлы. Как упоминалось ранее в в разделе «Форма-данные» вам нужно будет повторно прикрепить файл, если вы загружаете запрос через историю или коллекцию.

обновление

Как указал ВКК на WHATWG spec say urlencoded-это тип кодировки по умолчанию для форм.

недопустимым значением по умолчанию для этих атрибутов является состояние application/x-www-form-urlencoded. Недостающее значение по умолчанию для атрибута enctype также есть состояние application / x-www-form-urlencoded.

Примечание. Пожалуйста, обратитесь к [RFC2388] за дополнительной информацией о загрузке файлов, включая проблемы обратной совместимости, связь между «multipart/form-data» и другими типами контента, проблемы с производительностью и т. д.

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

тип контента «application / x-www-form-urlencoded» неэффективен для отправки большого количества двоичные данные или текст, содержащий символы, отличные от ASCII. Тип контента «multipart / form-data» должен использоваться для отправки форм, содержащих файлы, данные, отличные от ASCII, и двоичные данные.

содержимое «multipart / form-data» следует правилам всех составных потоков данных MIME, как описано в [RFC2045]. Определение «составные / форм-данные» доступно в реестре [IANA].

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

Читайте также:  dbghelp dll ошибка что делать

как и во всех составных типах MIME, каждая часть имеет необязательный заголовок «Content-Type», который по умолчанию равен «text/plain». Агенты пользователей должны предоставить заголовок «Content-Type», сопровождаемый » charset» параметр.

application / x-www-form-urlencoded

это тип контента по умолчанию. Формы, представленные с этим типом контента, должны быть закодированы следующим образом:

имена и значения элементов управления экранируются. Пробелы заменяются на +’, and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by %HH’, знак процента и две шестнадцатеричные цифры, представляющие код ASCII символа. Разрывы строк представлены в виде пар «CR LF» (т. е. %0D%0A’). The control names/values are listed in the order they appear in the document. The name is separated from the value by =’ и пары имя/значение отделяются друг от друг другое по’&’.

The тип контента «application/x-www-form-urlencoded» неэффективно для отправки большого количества двоичных данных или текста, содержащего символы, отличные от ASCII. Тип содержимого «multipart / form-data» следует использовать для отправки форм, содержащих файлы, данные, отличные от ASCII, и двоичные данные.

Источник

XMLHttpRequest POST, формы и кодировка

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/xmlhttprequest.

Во время обычной отправки формы

* ‘ ( ) заменяются на их цифровой код в UTF-8 со знаком %.

в JavaScript есть функция encodeURIComponent для получения такой кодировки «вручную»:

Эта кодировка используется в основном для метода GET, то есть для передачи параметра в строке запроса. По стандарту строка запроса не может содержать произвольные Unicode-символы, поэтому они кодируются как показано выше.

GET-запрос

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

POST с urlencoded

В стандартных HTTP-формах для метода POST доступны три кодировки, задаваемые через атрибут enctype :

В зависимости от enctype браузер кодирует данные соответствующим способом перед отправкой на сервер.

В случае с XMLHttpRequest мы, вообще говоря, не обязаны использовать ни один из этих способов. Главное, чтобы сервер наш запрос понял. Но обычно проще всего выбрать какой-то из стандартных.

Для примера отправим запрос в кодировке application/x-www-form-urlencoded :

Всегда используется только кодировка UTF-8, независимо от языка и кодировки страницы.

Если сервер вдруг ожидает данные в другой кодировке, к примеру windows-1251, то их нужно будет перекодировать.

Кодировка multipart/form-data

Кодировка urlencoded за счёт замены символов на %код может сильно «раздуть» общий объём пересылаемых данных. Поэтому для пересылки файлов используется другая кодировка: multipart/form-data.

В этой кодировке поля пересылаются одно за другим, через строку-разделитель.

Чтобы использовать этот способ, нужно указать его в атрибуте enctype и метод должен быть POST:

Форма при такой кодировке будет выглядеть примерно так:

…То есть, поля передаются одно за другим, значения не кодируются, а чтобы было чётко понятно, какое значение где – поля разделены случайно сгенерированной строкой, которую называют «boundary» (англ. граница), в примере выше это RaNdOmDeLiMiTeR :

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

Однако, никто не мешает использовать эту кодировку всегда для POST запросов. Для GET доступна только urlencoded.

POST с multipart/form-data

Сделать POST-запрос в кодировке multipart/form-data можно и через XMLHttpRequest.

Достаточно указать в заголовке Content-Type кодировку и границу, и далее сформировать тело запроса, удовлетворяющее требованиям кодировки.

Пример кода для того же запроса, что и раньше, теперь в кодировке multipart/form-data :

Тело запроса будет иметь вид, описанный выше, то есть поля через разделитель.

Можно создать запрос, который сервер воспримет как загрузку файла.

Для добавления файла нужно использовать тот же код, что выше, модифицировав заголовки перед полем, которое является файлом, так:

FormData

Современные браузеры, исключая IE9- (впрочем, есть полифил), поддерживают встроенный объект FormData, который кодирует формы для отправки на сервер.

Это очень удобно. Например:

Другие кодировки

XMLHttpRequest сам по себе не ограничивает кодировку и формат пересылаемых данных.

Поэтому для обмена данными часто используется формат JSON:

Итого

В XMLHttpRequest можно использовать и другие HTTP-методы, например PUT, DELETE, TRACE. К ним применимы все те же принципы, что описаны выше.

Источник

Сказочный портал