この問題を解決するための通常の解決策は次のとおりです:
$jsonData = $_POST[‘jsonstr’];
このメソッドでは、クライアントが jsonstr パラメーターを送信する必要があります。それに含まれるデータは json 文字列であり、サーバー上で解析されます。
クライアントが上記の jsonstr パラメーターを使用せずに json データを直接送信する場合。 $_GET、$_POST、$_REQUEST を使用してデータを取得することはできません。
解決策は、グローバル変数 $GLOBALS[‘HTTP_RAW_POST_DATA’] を使用して、クライアントから送信された JSON データを取得することです。
以下は、curl を使用して Thinkphp のコントローラーにデータを送信するコードです:
class CcAction extends Action { public function getjson(){ echo json_encode($GLOBALS['HTTP_RAW_POST_DATA']);//这里就能获取到testcurl传来的$json_string } public function testcurl(){ $header = array('Accept:application/json', 'Content-Type:application/json'); $patoken = array( 'name' => 'phpjyz', 'age' => '23', ); $json_string = json_encode($patoken); $ch = curl_init(); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'SSTS Browser/1.0'); curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($ch, CURLOPT_URL, 'http://www.scutephp.com/api.php/cc/getjson'); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_string); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $ret = curl_exec($ch); print_r(json_decode($ret, true)); } }
返されたデータは $json_string とまったく同じです。