Smern
Smern

Reputation: 19066

Send POST data via raw JSON with Postman

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

Upvotes: 162

Views: 541273

Answers (6)

Shojib Flamon
Shojib Flamon

Reputation: 1519

Solution 1 You can send using form-data

Solution 2 You can send using raw json data

Both solutions are working perfectly.

Thanks

Upvotes: 4

Itachi
Itachi

Reputation: 2995

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

skill synon pass json to postman

Upvotes: 97

Neo
Neo

Reputation: 561

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

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

Upvotes: 8

meda
meda

Reputation: 45490

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'
});

Upvotes: 56

Jaroslav Štreit
Jaroslav Štreit

Reputation: 430

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

Upvotes: 0

CoredusK
CoredusK

Reputation: 1229

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!

Upvotes: 9

Related Questions