Postman Chrome应用程序中的form-data,x-www-form-urlencoded和raw之间有什么区别?

Roh*_*han 186 forms rest web-services postman

我使用Postman Chrome扩展程序来测试Web服务.有三种可用于数据输入的选项.我想原始是发送JSON.另外两个,form-data和x-www-form-urlencoded有什么区别?

Bas*_*ngh 210

这些是W3C定义的不同表单内容类型.如果要发送简单的文本/ ASCII数据,那么x-www-form-urlencoded将起作用.这是默认值.

但是如果你必须发送非ASCII文本或大型二进制数据,那么表单数据就是这样的.

如果要发送纯文本或JSON或任何其他类型的字符串,可以使用Raw.顾名思义,Postman发送您的原始字符串数据,无需修改.您可以使用下拉列表中的内容类型标头设置要发送的数据类型.

当您想要将非文本数据附加到请求时,可以使用二进制,例如视频/音频文件,图像或任何其他二进制数据文件.

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

  • @Kamlesh,抱歉回复晚了,Postman 中表单数据的关键字段有一个下拉菜单,您可以在其中选择它是文本字段还是文件。您可以将其设置为文件,然后浏览文件以附加到正文。希望有帮助。 (2认同)

avc*_*vck 82

这更好地解释了: Postman docs

请求正文

在构造请求时,您将经常处理请求正文编辑器.Postman允许您发送几乎任何类型的HTTP请求(如果您无法发送内容,请告诉我们!).正文编辑器分为4个区域,根据体型有不同的控制.

形式数据

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

urlencoded的

此编码与URL参数中使用的编码相同.您只需输入键/值对,Postman将正确编码键和值.请注意,您无法通过此编码模式上传文件.表单数据和urlencoded之间可能存在一些混淆,因此请务必先检查您的API.

生的

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

二进制

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

UPDATE

正如VKK所指出的,WHATWG规范说urlencoded是表单的默认编码类型.

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

  • 邮差文件是错误的.WHATWG的HTML5规范可在https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fs-enctype上清楚地定义默认值"application/x-www-form-urlencoded"for表单元素的enctype属性.换句话说,"application/x-www-form-urlencoded"是Web表单用于传输数据的默认编码(在HTTP术语内容类型中),而不是multipart/form-data.要在表单提交上发送带有多部分/表单数据的内容类型的HTTP发布请求,必须将其明确指定为enctype值. (4认同)

Moh*_*med 19

多部分/格式数据

注意.有关文件上载的其他信息,请参阅RFC2388,包括向后兼容性问题,"multipart/form-data"与其他内容类型之间的关系,性能问题等.

有关表单安全问题的信息,请参阅附录.

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

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

"multipart/form-data"消息包含一系列部分,每个部分代表一个成功的控件.部件以相同的顺序发送到处理代理,相应的控件出现在文档流中.部分边界不应出现在任何数据中; 如何做到这一点超出了本规范的范围.

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

应用程序/ x-WWW窗体-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
Run Code Online (Sandbox Code Playgroud)

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


Sur*_*gch 9

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

在此处输入图片说明

表格数据

标头

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474
Run Code Online (Sandbox Code Playgroud)

身体

key1=value1key2=value2
Run Code Online (Sandbox Code Playgroud)

x-www-form-urlencoded

标头

Content-Type: application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)

身体

key1=value1&key2=value2
Run Code Online (Sandbox Code Playgroud)

原始文字/纯文字

标头

Content-Type: text/plain
Run Code Online (Sandbox Code Playgroud)

身体

This is some text.
Run Code Online (Sandbox Code Playgroud)

原始json

标头

Content-Type: application/json
Run Code Online (Sandbox Code Playgroud)

身体

{"key1":"value1","key2":"value2"}
Run Code Online (Sandbox Code Playgroud)

  • @主体是等效的,但如果服务器正在查找 JSON,则“Content-Type”标头将被错误命名。 (2认同)

ash*_*deh 9

让我们把一切都简单化,这都是关于如何发出 http 请求的:

1- x-www-form-urlencoded 在此输入图像描述

http请求:

GET /getParam1 HTTP/1.1
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Postman-Token: a14f1286-52ae-4871-919d-887b0e273052
Host: localhost:12345
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 55

postParam1Key=postParam1Val&postParam2Key=postParam2Val
Run Code Online (Sandbox Code Playgroud)

2- 原料

在此输入图像描述

http请求:

GET /getParam1 HTTP/1.1
Content-Type: text/plain
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Postman-Token: e3f7514b-3f87-4354-bcb1-cee67c306fef
Host: localhost:12345
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 73

{
    postParam1Key: postParam1Val,
    postParam2Key: postParam2Val
}
Run Code Online (Sandbox Code Playgroud)

3-表单数据

在此输入图像描述

http请求:

GET /getParam1 HTTP/1.1
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Postman-Token: 8e2ce54b-d697-4179-b599-99e20271df90
Host: localhost:12345
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------140760168634293019785817
Content-Length: 181

----------------------------140760168634293019785817
Content-Disposition: form-data; name="postParam1Key"

postParam1Val
----------------------------140760168634293019785817--
Run Code Online (Sandbox Code Playgroud)