PandemoniumSyndicate
PandemoniumSyndicate

Reputation: 2955

POST empty when curling JSON

I'm using curl to send this:

curl -i -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "{firstname:james}" http://hostname/index.php

I'm trying to display POST like this in index.php

<?php
die(var_dump($_POST)); 
?>

Which outputs

array(0) {
}

I must be misunderstanding something about sending JSON data via POST

Thank you for your time

Upvotes: 17

Views: 11432

Answers (2)

gen_Eric
gen_Eric

Reputation: 227220

$_POST only works if you are sending encoded form data. You are sending JSON, so PHP cannot parse it into the $_POST array.

You need to read directly from the POST body.

$post = fopen('php://input', 'r');
$data = json_decode(stream_get_contents($post));
fclose($post);

Upvotes: 10

deceze
deceze

Reputation: 522032

$_POST is an array that is only populated if you send the POST body in URL encoded format. PHP does not parse JSON by itself automatically and hence does not populate the $_POST array. You need to get the raw POST body and decode the JSON yourself:

$json = file_get_contents('php://input');
$values = json_decode($json, true);

Upvotes: 45

Related Questions