【问题标题】: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 ;-) 这就是我很困惑的原因。必须有一个关闭的标题或其他东西。

标签: javascript angularjs api postman


【解决方案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,您应该一切顺利。

              【讨论】:

              • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-07-21
              • 1970-01-01
              • 1970-01-01
              • 2021-01-14
              • 2018-03-29
              • 2021-02-01
              • 1970-01-01
              相关资源
              最近更新 更多