Postman Chrome:表单数据,x-www-form-urlencoded和原始数据之间有什么区别


222

我正在使用Postman Chrome扩展程序来测试Web服务。

数据输入有三个选项。

我想这raw是用于发送JSON。

其他两个form-data和之间有什么区别x-www-form-urlencoded


11
到今天为止,还有第四个选项可以在邮递员工具-中发布数据binary
RBT

Answers:


237

这些是W3C定义的不同的Form内容类型。如果要发送简单的文本/ ASCII数据,则可以使用x-www-form-urlencoded。这是默认值。

但是,如果您必须发送非ASCII文本或大型二进制数据,则表单数据适用于此。

如果要发送纯文本或JSON或任何其他类型的字符串,则可以使用Raw。顾名思义,Postman会直接发送您的原始字符串数据,而无需进行任何修改。您可以使用下拉菜单中的content-type标头设置要发送的数据类型。

二进制可当你要非文本数据附加到该请求,例如视频/音频文件,图像,或任何其他的二进制数据文件中使用。

请参阅此链接以进一步阅读: HTML文档中的表单


二进制呢?
RBT

我有一个包含4个文本字段和1个文件上传字段的表单,现在请建议我使用哪个选项(表单数据或x-www-form-urlencoded)在邮递员中提交这5个字段的值?提前致谢。
Kamlesh

@Kamlesh,对您的答复表示抱歉,Postman中form-data的关键字段有一个下拉列表,您可以在其中选择是文本字段还是文件。您可以将其设置为file,然后浏览文件以附加到正文。希望能有所帮助。
巴森特·辛格

87

这可以更好地说明: 邮递员文档

要求正文

在构造请求时,您将与请求主体编辑器打交道。Postman允许您发送几乎所有类型的HTTP请求(如果您无法发送某些请求,请告诉我们!)。正文编辑器分为4个区域,根据正文类型具有不同的控件。

表格数据

multipart / form-data是Web表单用于传输数据的默认编码。这模拟在网站上填写表格并提交。表单数据编辑器使您可以为数据设置键/值对(使用键值编辑器)。您也可以将文件附加到密钥。请注意,由于HTML5规范的限制,文件未存储在历史记录或集合中。发送请求时,您将不得不再次选择文件。

urlencoded

此编码与URL参数中使用的编码相同。您只需要输入键/值对,Postman就会正确编码键和值。请注意,您无法通过此编码模式上传文件。表单数据和urlencode编码之间可能会有一些混淆,因此请确保首先检查您的API。

生的

原始请求可以包含任何内容。除替换环境变量外,Postman不会触摸在原始编辑器中输入的字符串。无论您在文本区域中输入什么内容,都将随请求一起发送。使用原始编辑器,您可以设置格式类型以及应随原始正文发送的正确标题。您也可以手动设置Content-Type标头。通常,您将在此处发送XML或JSON数据。

二元

二进制数据允许您发送无法在Postman中输入的内容。例如,图像,音频或视频文件。您也可以发送文本文件。如前面在“表单数据”部分所述,如果要通过历史记录或集合加载请求,则必须重新附加文件。

更新

正如VKK指出的那样WHATWG规范说urlencoded是表单的默认编码类型。

这些属性的默认值默认为application / x-www-form-urlencoded状态。enctype属性的默认缺失值也是application / x-www-form-urlencoded状态。


5
邮递员文档错误。WHATWG的HTML5规范可在html.spec.whatwg.org/multipage/…获得,它为form元素的enctype属性明确定义了“ application / x-www-form-urlencoded”的默认值。换句话说,“ application / x-www-form-urlencoded”是Web表单用于传输数据而不是multipart / form-data的默认编码(以HTTP术语Content-Type)。要针对内容提交类型为multipart / form-data的表单提交发送HTTP发布请求,必须将其明确指定为enctype值。
VKK

那么,与标头一起发送的表单数据(在Postman UI中用键值对输入)之间的区别是什么Content-Type: application/json?和原始数据输入为json一样{foo: bar}Content-Type: application/json标头?
Inigo

使用表单数据作为键值对时,即使您指定标题,内容类型也是多部分的表单数据;带有原始内容类型的内容类型将是文本或您在标题中指定的任何内容。
avck

20

多部分/表单数据

注意。请参阅RFC2388,以获取有关文件上传的其他信息,包括向后兼容性问题,“多部分/表单数据”与其他内容类型之间的关系,性能问题等。

请查阅附录以获取有关表格安全性问题的信息。

内容类型“ application / x-www-form-urlencoded”对于发送大量二进制数据或包含非ASCII字符的文本效率不高。内容类型“ multipart / form-data”应用于提交包含文件,非ASCII数据和二进制数据的表单。

内容类型“ multipart / form-data”遵循RFC2045中概述的所有多部分MIME数据流的规则。可在[IANA]注册表中找到“ multipart / form-data”的定义。

“多部分/表单数据”消息包含一系列部分,每个部分代表成功的控件。零件以相应控件出现在文档流中的顺序发送到处理代理。零件边界不应出现在任何数据中;如何完成此操作不在本规范的范围之内。

与所有多部分MIME类型一样,每个部分都有一个可选的“ Content-Type”标头,默认为“文本/纯文本”。用户代理应提供“ Content-Type”标头,并附带“ charset”参数。

应用程序/ 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=和“名称/值”对之间用“&”分隔)。

application/x-www-form-urlencoded发送到服务器的HTTP消息的主体本质上是一个巨大的查询字符串-名称/值对由&符分隔,名称与值由等号(=)分隔。例如:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

内容类型“application / X WWW的窗体-urlencoded”是低效的,用于发送大量的二进制数据或包含非ASCII字符的文本。内容类型“ multipart / form-data”应用于提交包含文件,非ASCII数据和二进制数据的表单。


15

以下是一些补充示例,以查看Postman在请求中传递的原始文本。您可以通过打开Postman控制台来查看以下内容:

在此处输入图片说明

表格数据

标头

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474

身体

key1=value1key2=value2

x-www-form-urlencoded

标头

Content-Type: application/x-www-form-urlencoded

身体

key1=value1&key2=value2

原始文字/纯文字

标头

Content-Type: text/plain

身体

This is some text.

原始json

标头

Content-Type: application/json

身体

{"key1":"value1","key2":"value2"}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.