邮递员表单数据有效,但原始等价物无效

Posted

技术标签:

【中文标题】邮递员表单数据有效,但原始等价物无效【英文标题】:Postman form-data works, but the raw equivalent doesn't 【发布时间】:2015-03-01 21:03:55 【问题描述】:

我有一个正在测试的 API,如果我通过“form-data”提交具有以下值的数据,它可以工作:

key: response[comment]
value: This is a test

但是,如果我在“原始”选项卡中使用以下结构执行一些自定义 JSON,则它不起作用:

 "response[comment]": "This is a test" 

说实话,这让我发疯了,因为服务器没有向我提供任何问题的详细信息。 我感觉是对象的编码出错了,但是我使用的是 Angular,我得到了相同的 400 错误,而我相当确定它应该只使用 JS 对象作为 .post 上的数据。

任何帮助将不胜感激!

【问题讨论】:

你明白JSON和www-form-urlencoded其实是不同的格式吗?我怀疑有没有办法强制服务器从客户端解析 JSON 编码的有效负载。 是的,虽然我没有使用 x-www-form-urlencoded,但我在 Postman 中使用了表单数据,即 JSON ;-) 这就是我很困惑的原因。必须有一个关闭的标题或其他东西。 【参考方案1】:

好的,我找到了。

显然“comment[response]”实际上是:

"comment":"response": "something"

在 JSON 中。

学到了一些东西:)

【讨论】:

【参考方案2】:

确保您的 Content-Type 标头!

如果您的原始数据是 JSON:Content-Type: application/json

我遇到了与您类似的问题:我的请求正在使用 form-data,但不是 raw... 在调试请求服务器端之后,我意识到我的请求 Content-Type 是 "text/plain;charset=UTF-8".. 即使在侧面下拉列表中选择了 JSON...

希望它能节省下一个的时间;)

【讨论】:

【参考方案3】:

在我的例子中,一个表单数据条目被转换为标题,并且根本没有包含在正文中。它还可以显式设置标题而不是输入表单数据。不涉及其他答案的 Content-Type 和 JSON 格式。我不希望任意的表单数据键以这种方式工作。在这种情况下,唯一使用的键是“ID”。

【讨论】:

【参考方案4】:

我也有一个 API,如果我通过“form-data”提交具有以下值的数据,它可以工作:

键:survey_answer[answers_json]

值:"2456-9876-4ff7-9807-4097ed21be57":"testing from postman-today"

我尝试将其转换为原始数据,所以最后我可以解决这个问题

"survey_answer":"answers_json": "2ed4e729-c1fa-4ff7-9807-4097ed21be57":"test from tessa"

如果您的原始数据是 JSON:设置 Content-Type: application/json

希望这会有所帮助:)

【讨论】:

【参考方案5】:

使用 JSON(application/json) 选择原始选项。

【讨论】:

【参考方案6】:

在我的例子中,网址是 localhost/index.php?userId=1 - 我使用的是 "username":"abc" 的原始模式

然后,我将网址转换为localhost/index.php?userId=1&username=abc - 它适用于GETPOST,具有以下json: "userId":"1","username":"abc" 和网址localhost/index.php?userId=1&username=abc

【讨论】:

【参考方案7】:

希望这对某人有所帮助,但在我的情况下,下拉方法是执行 GET 而不是 POST。将其更改为 POST,您应该一切顺利。

【讨论】:

请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。

以上是关于邮递员表单数据有效,但原始等价物无效的主要内容,如果未能解决你的问题,请参考以下文章

邮递员表单数据和 x-www-form-urlencoded 工作,但原始 json 没有

提交时的表单验证 - angularjs 1.5 - 当字段 $pristine 时 $invalid

在邮递员表单数据中发布嵌套的 json

Angular 2+多部分表单验证,如何检查单个输入的有效性

无法通过邮递员 put 请求提交表单数据

根据ajax响应提交表单