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

2022-01-22 00:00:00 json rest postman php

我有 Postman(不能在 Chrome 中打开的那个),我正在尝试使用原始 JSON 发出 POST 请求.

I've got Postman (the one that doesn't open in Chrome) and I'm trying to do a POST request using raw JSON.

在正文"选项卡中,我有原始"选项卡.选择和JSON(应用程序/json)";用这个身体:

In the Body tab I have "raw" selected and "JSON (application/json)" with this body:

{
    "foo": "bar"
}

对于我有 1 的标题,Content-Type: application/json

For the header I have 1, Content-Type: application/json

在 PHP 方面,我现在只是在做 print_r($_POST);,我得到一个空数组.

On the PHP side I'm just doing print_r($_POST); for now, and I'm getting an empty array.

如果我使用 jQuery 并且这样做:

If I use jQuery and do:

$.ajax({
    "type": "POST",
    "url": "/rest/index.php",
    "data": {
        "foo": "bar"
    }
}).done(function (d) {
    console.log(d);
});

我得到了预期:

Array
(
    [foo] => bar
)

那么为什么不使用 Postman 呢?

So why isn't it working with Postman?

邮递员截图:

和标题:

推荐答案

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

Unlike jQuery in order to read raw JSON you will need to decode it in PHP.

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

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

php://input is a read-only stream that allows you to read raw data from the request body.

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

$_POST is form variables, you will need to switch to form radiobutton in postman then use:

foo=bar&foo2=bar2

使用 jquery 发布原始 json:

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

相关文章