关于PHP接收HTTP模拟POST传JSON格式时$_POST为空的问题

编写项目时需要将数据转换成json格式的字符串,并通过post传参传给后台,但在后台接收数据时发现$_POST参数为空 

头部为:

curl_setopt($ci, CURLOPT_HEADER, 0);
curl_setopt($ci, CURLOPT_HTTPHEADER,array('Content-Type: application/json; charset=utf-8','Content-Length:' . strlen($tmpdatastr)));

针对这个问题在网上查询资料发现,仅在 Coentent-Type的值为application/x-www-data-urlencode和multipart/form-data时,php才会将http请求数据包中的数据填进$_POST中,

其他类型的Coentent-Type,php不能自动识别,会将相应的数据填入变量$HTTP_RAW_POST_DATA中.

所以可以使用两种方法在这种情况下获取数据

1.通过$HTTP_RAW_POST_DATA获取

$post_data = $GLOBALS['HTTP_RAW_POST_DATA'];

但需要修改相应的php.ini指令

2.通过php://input获取(建议使用这种方法 php://input数据总是和$HTTP_RAW_POST_DATA相同,但php://input更凑效且不需要修改php.ini)

$post_data = file_get_contents("php://input"); 

 

By Hgq

posted @ 2018-02-01 15:32  WidgetBox  阅读(2528)  评论(0编辑  收藏  举报