邮递员表单数据有效,但原始等价物无效
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
- 它适用于GET
和POST
,具有以下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