使用 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 在您的帖子中 fields
和 foo
不匹配,因此它不起作用,我不确定这是否是错字,但请确保它们匹配
@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 数据的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel 中使用 GuzzleHttp 发送原始空 json
如何将 json 参数从 Postman 发送到 Jenkins?