Вы отправляете данные в виде необработанного JSON в теле, они не будут заполнять переменную $_POST
.
Вам необходимо выполнить одно из двух действий:
- Выможно изменить тип содержимого на тип, который будет заполнять массив
$_POST
- . Вы можете читать необработанные данные тела.
Я бы порекомендовал второй вариант, если вы контролируете оба концасвязи, так как это позволит свести размер тела запроса к минимуму и сохранить пропускную способность с течением времени.( Edit: я не особо подчеркивал, что объем сохраняемой полосы пропускания пренебрежимо мал, всего несколько байт на запрос, это может быть только серьезной проблемой при очень высокой скорости трафика. Однако я все же рекомендую второй вариантпотому что это самый чистый способ )
В вашем файле test_curl
сделайте следующее:
$fp = fopen('php://input', 'r');
$rawData = stream_get_contents($fp);
$postedJson = json_decode($rawData);
var_dump($postedJson);
Если вы хотите заполнить переменную $_POST
, вам необходимоизмените способ отправки данных на сервер:
$data = array (
'name' => 'Hagrid',
'age' => '36'
);
$bodyData = array (
'json' => json_encode($data)
);
$bodyStr = http_build_query($bodyData);
$url = 'http://localhost/project/test_curl';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.strlen($bodyStr)
));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyStr);
$result = curl_exec($ch);
Необработанный, не закодированный JSON теперь будет доступен в $_POST['json']
.