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

Posted

技术标签:

【中文标题】使用 Postman 通过原始 JSON 发送 POST 数据【英文标题】:Send POST data via raw JSON with Postman 【发布时间】: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 转储中输出 【参考方案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 一起使用呢?

以上是关于使用 Postman 通过原始 JSON 发送 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Postman 发送(嵌套)json 对象和文件

在 laravel 中使用 GuzzleHttp 发送原始空 json

postman怎么发送json参数

如何将 json 参数从 Postman 发送到 Jenkins?

如何通过 Postman 以 JSON 格式在请求正文中发送对象数组?

Postman发送请求,及后台接收