魏长东

weichangdong

东邪

可以收到HTTP_RAW_POST_DATA数值,但是收不到POST的值

今天工作遇到一个现象,我用POST给传过去的数值,那边打印出来只有HTTP_RAW_POST_DATA的数值,没有POST的数值。

http_raw_post.png

网上搜了下,原来是发请求的头信息的Content-Type不对造成的,我用http_build_query封装的POST数据,但是用的是Content-Type: application/json 这样Content-Type,我改成Content-Type: application/x-www-form-urlencoded就好了。

另外这两者的区别如下:

$_POST:通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。

$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。

也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。

但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。