124
votes

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

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

{
    "foo": "bar"
}

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

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


If I use jQuery and do:

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

I'm getting as expected:

Array
(
    [foo] => bar
)

So why isn't it working with Postman?


Postman screenshots:

enter image description here

and header:

enter image description here

5
Try $_REQUEST instead $_POST and var_dump() instead print_r()Deep
@Deep I get array(1) {["foo"]=> string(3) "bar"} with jQuery and still an empty array with Postman: array(0) {}Dallas
So Postman not sending requestDeep
@smerny in your post fields and foo wont match thus it won't work, Im not sure if it is a typo but make sure they matchmeda
@meda, right that was a typo, but if I had fields it still should have output in the var dump of $_REQUEST or $_POSTDallas

5 Answers

43
votes

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 is a read-only stream that allows you to read raw data from the request body.

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

foo=bar&foo2=bar2

To post raw json with jquery:

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

Just check JSON option from the drop down next to binary; when you click raw. This should do

skill synon pass json to postman

8
votes

meda's answer is completely legit, but when I copied the code I got an error!

Somewhere in the "php://input" there's an invalid character (maybe one of the quotes?).

When I typed the "php://input" code manually, it worked. Took me a while to figure out!

7
votes

I was facing the same problem, following code worked for me:

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

1
votes

Install Postman native app, Chrome extension has been deprecated. (Mine was opening in own window but still ran as Chrome app)