Я пытаюсь получить данные POST
в форме JSON. Я скручиваю его как:
curl -v --header 'content-type:application/json' -X POST --data '{"content":"test content","friends":[\"38383\",\"38282\",\"38389\"],"newFriends":0,"expires":"5-20-2013","region":"35-28"}' http://testserver.com/wg/create.php?action=post
На стороне PHP мой код:
$data = json_decode(file_get_contents('php://input')); $content = $data->{'content'}; $friends = $data->{'friends'}; // JSON array of FB IDs $newFriends = $data->{'newFriends'}; $expires = $data->{'expires'}; $region = $data->{'region'};
Но даже когда я print_r ( $data)
мне ничего не возвращается. Это правильный способ обработки POST
без формы?
Данные JSON, которые вы отправляете, недействительны JSON.
Когда вы используете «в своей оболочке, он не будет обрабатывать», как вы подозреваете.
curl -v --header 'content-type:application/json' -X POST --data '{"content":"test content","friends": ["38383","38282","38389"],"newFriends":0,"expires":"5-20-2013","region":"35-28"}'
Работает так, как ожидалось.
<?php $foo = file_get_contents("php://input"); var_dump(json_decode($foo, true)); ?>
Выходы:
array(5) { ["content"]=> string(12) "test content" ["friends"]=> array(3) { [0]=> string(5) "38383" [1]=> string(5) "38282" [2]=> string(5) "38389" } ["newFriends"]=> int(0) ["expires"]=> string(9) "5-20-2013" ["region"]=> string(5) "35-28" }