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

Dal*_*las 90 php rest json postman

我有Postman(在Chrome中没有打开的那个),我正在尝试使用原始json进行POST请求.

在Body选项卡中,我选择了"raw"和"JSON(application/json)"这个正文:

{
    "foo": "bar"
}
Run Code Online (Sandbox Code Playgroud)

对于标题我有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);
});
Run Code Online (Sandbox Code Playgroud)

我得到了预期的结果:

Array
(
    [foo] => bar
)
Run Code Online (Sandbox Code Playgroud)

那么为什么它不与Postman合作?


邮差截图:

在此输入图像描述

和标题:

在此输入图像描述

med*_*eda 32

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

print_r(json_decode(file_get_contents("php://input"), true));
Run Code Online (Sandbox Code Playgroud)

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

$_POST是表单变量,你需要切换到formradiobutton postman然后使用:

foo=bar&foo2=bar2
Run Code Online (Sandbox Code Playgroud)

要发布的原始jsonjquery:

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


Ita*_*chi 22

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

技能synon将json传递给邮递员

  • 这是一个相当老的帖子。.但是,如果您查看问题,您会发现我确实做到了。您可能需要阅读问题,选定的答案以及对选定答案的评论,以更好地理解问题和解决方案。 (4认同)
  • 当然,但这实际上指出了我遇到的问题;我选择了“文本”,而不是 application/json,尽管标题部分已经提到了这一点。令人困惑;如果您选择“文本”,则会显示整个 HTTP POST“代码”,包括 JSON,我希望它可以工作,因为它是一个完整的 POST 调用,而不仅仅是 json。 (2认同)

Cor*_*usK 7

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

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

当我"php://input"手动输入代码时,它工作正常.花了一段时间才弄明白!

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

Neo*_*Neo 5

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

$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);
Run Code Online (Sandbox Code Playgroud)