记-curl post json数据,服务器后端$_POST接收不到数据
curl端:向某服务器后端接口返回数据
$url = "http://xxx.com/getdataFile.php";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
if(!$data){
die();
}
if(is_array($data))
{
$data = json_encode($data);
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HEADER, 0);
#记住这个设置向curl地址传送json数据
curl_setopt($curl, CURLOPT_HTTPHEADER,array(
'Content-Type: application/json; charset=utf-8',
'Content-Length:' . strlen($data),
'Cache-Control: no-cache',
'Pragma: no-cache'
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
$errorno = curl_errno($curl);
if ($errorno) {
echo $errorno;
}
curl_close($curl);
服务器端:
接收数据方式:$data = json_decode(file_get_contents('php://input'), true);或者$data = json_decode($GLOBALS['HTTP_RAW_POST_DATA'],true)
注:$data = $_POST 这样,正常的接收方式是接收不到数据的
附:
ajax默认是以application/x-www-form-urlencoded方式提交。也就是常见的表单提交方式。在PHP中使用$_POST方式可以获取,但,如果将ajax的请求头强制指定为 application/json,那么你的
$_POST
就接收不到数据了