使用邮递员通过原始json发送POST数据


107

我有Postman(在Chrome中无法打开的邮递员),并且我正在尝试使用原始json发出POST请求。

在“正文”选项卡中,我选择了“原始”,并使用该正文“ 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合作呢?


邮递员截图:

在此处输入图片说明

和标题:

在此处输入图片说明


尝试用$ _REQUEST代替$ _POST和var_dump()代替print_r()
2016年

@Deep我array(1) {["foo"]=> string(3) "bar"}使用jQuery,而邮递员仍然是一个空数组:array(0) {}
达拉斯

因此,邮递员未发送请求
2013年

@smerny在您的文章fields,并foo因此不会匹配它不会工作,林不知道,如果它是一个错字,但确保他们匹配
梅达

@meda,对,这是一个错字,但是如果我有字段,它仍然应该在$ _REQUEST或$ _POST的var转储中输出
达拉斯

Answers:


38

jQuery读取原始数据不同,JSON您需要使用PHP对其进行解码。

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

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

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

foo=bar&foo2=bar2

要发布的原始jsonjquery

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

是的,exaclty发布json与发布变量不同
meda

43

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

技能synon将json传递给邮递员


4
这是一个相当老的帖子。.但是,如果您看一个问题,您会发现我确实做到了。您可能需要阅读问题,所选答案以及对所选答案的评论,以更好地理解问题和解决方案。
达拉斯

1
当然可以,但这实际上可以指出我遇到的问题。我已经选择了“文本”,而不是application / json,即使“标题”部分已经提到了这一点。它令人困惑;如果选择“文本”,则会显示整个HTTP POST“代码”,包括我希望使用的JSON,因为它是完整的POST调用,而不仅仅是json。
Ted

7

meda的答案是完全合法的,但是当我复制代码时,我得到了一个错误!

某个地方"php://input"有一个无效字符(也许是引号之一?)。

当我"php://input"手动键入代码时,它可以工作。花了我一段时间找出答案!


1
很高兴我向下滚动了一下,看到了-我遇到了同样的问题。好发现!
查理·斯坦纳德

2
好像有人在对meda帖子的编辑中修复了它。但是我查看了编辑历史记录,发现原始帖子的200c 200b“输入”中的“ n”和“ p”之间有(零宽度字符)。不知道他怎么会这样,但是现在已经解决了。
达拉斯

6

我遇到了同样的问题,以下代码为我工作:

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


1

安装Postman本机应用程序,不建议使用Chrome扩展程序。(我的窗口在自己的窗口中打开,但仍作为Chrome应用运行)


2
这不能回答问题。
jhpratt

@jhpratt实际上可以。我有同样的问题。使用Postman应用程序时,它可以工作。问题是:那为什么不与Postman合作呢?
JaroslavŠtreit'19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.