使用Postman通过原始JSON发送POST数据

157

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

在Body选项卡中,我选择了“raw”并选择了“JSON(application/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中没有起作用呢?


Postman截图:

enter image description here

和标头:

enter image description here


Postman没有发送请求。 - Deep
@smerny在你的帖子中,“fields”和“foo”不匹配,因此它无法工作。我不确定这是否是打字错误,但请确保它们匹配。 - meda
@meda - 已发布截图。 - Smern
@meda,有趣...现在Postman给我返回{ "foo": "bar"},而jQuery则是foo=bar。我真的需要两个地方都返回相同的结果... Postman只是用来测试的。 - Smern
让我们在聊天中继续这个讨论。点击此处进入聊天室 - meda
显示剩余5条评论
6个回答

94

只需在二进制旁边的下拉菜单中检查JSON选项,然后单击原始。这样就可以了。

skill synon pass json to postman


8
这是一篇相当古老的帖子,但如果您看一下问题,就会发现我确实做到了。您可能想阅读问题、已选答案以及已选答案的评论,以更好地理解问题和解决方案。 - Smern
3
可以的,但是这实际上指出了我的问题所在;我选择了“文本”,而不是应用程序/ json,尽管在标题部分已经提到了这一点。这很令人困惑;如果您选择“文本”,则会显示整个HTTP POST“代码”,包括JSON,我本来以为可以成功,因为这是完整的POST调用,而不仅仅是JSON。 - Ted
太好了!这就是我的“问题”。我本来期望JSON是一个逻辑上的默认值。 - Sinisa Rudan

55

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与发布变量是不同的。 - meda

9

meda的答案完全正确,但是当我复制代码时出现了错误!

"php://input"中某处存在无效字符(可能是其中一个引号?)。

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


1
很高兴我继续向下滚动并看到了这个 - 我也遇到了同样的问题。好发现! - Charlie Stanard
4
看起来有人在编辑meda的帖子时修复了它。但我查看了编辑历史,发现原始帖子中在"input"的"n"和"p"之间有200c 200b(零宽字符)。不确定他是怎么弄出来的,但现在已经修复了。 - Smern
很高兴我继续向下滚动。在浪费了大约3个小时后,我终于解决了它。 - Ritobroto Mukherjee

8

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

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


4

解决方案1 您可以使用表单数据发送

解决方案2 您可以使用原始JSON数据发送

这两种解决方案都完美地工作。

感谢


只有第二个选项对我起作用。 - Nowdeen

0

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


5
这并不能回答这个问题。 - jhpratt
@jhpratt 实际上确实可以。我也遇到了同样的问题。当使用 Postman 应用程序时,它可以正常工作。问题是:为什么不使用 Postman 就无法工作? - Jaroslav Štreit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接