1 PHP接收POST数据为空的问题

最近写自己的项目时,还是按照往常一样将请求参数转成json格式的字符串,然后通过post请求PHP接口,但是在PHP中$_POST的数据为空。

这里我的请求头Content-Type设置为application/json,这个也是出问题的地方。

经过后面搜索资料,只有请求头的Content-Typeapplication/x-www-data-urlencodedmultipart/form-data的情况下,PHP才会将http请求数据包相应的数据填入全局变量$_POST

而对于请求头的Content-Typeapplication/json时,则会将相应的数据填入到$HTTP_RAW_POST_DATA中。

对于请求头的Content-Typeapplication/json请求,我们有两种方法获取数据。

(1)第一种通过$HTTP_RAW_POST_DATA变量获取

$post_data = $GLOBALS['HTTP_RAW_POST_DATA'];

这种方法需要修改php.ini

(2)第二种方法:通过php://input获取

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

这种方法不需要修改php.ini,更加推荐使用这种方式。

还需要注意的是,当Content-Typemultipart/form-data的情况下,PHP不会将http请求数据包的相应数据填入到$HTTP_RAW_POST_DATA中,所以不能使用上述两种方式获取请求数据。

参考