【问题标题】:Send POST data via raw JSON with Postman使用 Postman 通过原始 JSON 发送 POST 数据
【发布时间】:2016-12-24 18:52:50
【问题描述】:

我有 Postman(不能在 Chrome 中打开的那个),我正在尝试使用原始 JSON 进行 POST 请求。

在“正文”选项卡中,我选择了“原始”并使用此正文选择了“JSON(应用程序/json)”:

{
    "foo": "bar"
}

对于标题我有 1,Content-Type: application/json

在 PHP 方面,我现在只是在做 print_r($_POST);,我得到一个空数组。


如果我使用 jQuery 并且这样做:

$.ajax({
    "type": "POST",
    "url": "/rest/index.php",
    "data": {
        "foo": "bar"
    }
}).done(function (d) {
    console.log(d);
});

我得到了预期:

Array
(
    [foo] => bar
)

那么为什么不使用 Postman 呢?


邮递员截图:

和标题:

【问题讨论】:

  • 尝试 $_REQUEST 代替 $_POST 和 var_dump() 代替 print_r()
  • @Deep 我用 jQuery 得到了 array(1) {["foo"]=> string(3) "bar"},而 Postman 仍然是一个空数组:array(0) {}
  • 所以邮递员没有发送请求
  • @smerny 在您的帖子中 fieldsfoo 不匹配,因此它不起作用,我不确定这是否是错字,但请确保它们匹配
  • @meda,没错,这是一个错字,但如果我有字段,它仍然应该在 $_REQUEST 或 $_POST 的 var 转储中输出

标签: php json rest postman


【解决方案1】:

只需从二进制旁边的下拉菜单中选中 JSON 选项即可;当您单击原始时。应该这样做

【讨论】:

  • 这是一篇相当老的帖子。但如果你看看这个问题,你会发现我就是这么做的。您可能需要阅读问题、所选答案以及所选答案上的 cmets,以更好地了解问题和解决方案。
  • 当然,但这实际上指出了我遇到的问题;我选择了“文本”,而不是应用程序/json,尽管标题部分已经提到过。它令人困惑;如果您选择“文本”,则会显示整个 HTTP POST“代码”,包括我希望工作的 JSON,因为它是一个完整的 POST 调用,而不仅仅是 json。
【解决方案2】:

jQuery 不同,要读取原始JSON,您需要在PHP 中对其进行解码。

print_r(json_decode(file_get_contents("php://input"), true));

php://input 是一个只读流,允许您从请求正文中读取原始数据。

$_POST 是表单变量,你需要切换到postman 中的form 单选按钮然后使用:

foo=bar&foo2=bar2

使用jquery 发布原始json

$.ajax({
    "url": "/rest/index.php",
    'data': JSON.stringify({foo:'bar'}),
    'type': 'POST',
    'contentType': 'application/json'
});

【讨论】:

  • 是的,发布 json 与发布变量不同
【解决方案3】:

meda 的回答完全合法,但是当我复制代码时出现错误!

"php://input" 中的某处有一个无效字符(可能是引号之一?)。

当我手动输入"php://input" 代码时,它起作用了。 我花了一段时间才弄清楚!

【讨论】:

  • 很高兴我向下滚动了一点,看到了这个 - 我遇到了同样的问题。很好的发现!
  • 看起来有人在编辑 meda 的帖子时修复了它。但是我查看了编辑历史,发现原始帖子在“输入”中的“n”和“p”之间有200c 200b(零宽度字符)。不知道他是怎么解决这个问题的,但现在已经解决了。
  • 很高兴我向下滚动。经过大约 3 小时的浪费后得到修复
【解决方案4】:

我遇到了同样的问题,以下代码对我有用:

$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);

【讨论】:

    【解决方案5】:

    解决方案 1

    解决方案 2

    两种解决方案都运行良好。

    谢谢

    【讨论】:

      【解决方案6】:

      安装 Postman 原生应用,Chrome 扩展程序已被弃用。 (我的在自己的窗口中打开,但仍然作为 Chrome 应用程序运行)

      【讨论】:

      • 这不能回答问题。
      • @jhpratt 实际上是这样。我有同样的问题。使用 Postman 应用程序时,它起作用了。问题是:那为什么它不能与 Postman 一起使用呢?
      猜你喜欢
      • 2018-03-07
      • 2017-08-28
      • 2018-05-17
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2021-02-19
      • 2017-01-21
      相关资源
      最近更新 更多