欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

借助curl理解$GLOBALS['HTTP_RAW_POST_DATA'] ,$_POST, php://input

程序员文章站 2022-04-12 19:03:55
...
发送请求代码

post.php

接收请求的代码

url.php

HTTP_RAW_POST_DATA:";print_r($GLOBALS["HTTP_RAW_POST_DATA"]);echo "

post:

";print_r($_POST);echo "

input:

";print_r(file_get_contents("php://input"));echo "
";echo "CONTENT_TYPE:".($_SERVER['CONTENT_TYPE']);

post.php执行结果

HTTP_RAW_POST_DATA:

post:

Array ( [a] => 123|b=2 [c] => 3 )

input:

a=123|b=2&c=3

CONTENT_TYPE:application/x-www-form-urlencoded

1.说明当没传content-type时 php默认是application/x-www-form-urlencoded ,此时php可识别 ,$GLOBALS["HTTP_RAW_POST_DATA"] 为空,post即为识别后生成的数组,php://input 获取原始数据

如果穿的数据时123456 $_POST里因为没key也是无数据的,php://input里还是原始数据

2.如果设置$header[]="content-type:text/xml";

执行结果是

HTTP_RAW_POST_DATA:

a=123|b=2&c=3

post:

Array ( )

input:

a=123|b=2&c=3

CONTENT_TYPE:text/xml

此时Post里是没数据的,HTTP_RAW_POST_DATA 里有数据

php://input 里始终是原始数据

综上所诉:

当content-type为默认的 application/x-www-form-urlencoded 时php可处理Post过来的数据并组合生成$_POST数组 $GLOBALS["HTTP_RAW_POST_DATA"] 里此时无值

当content-type为其它类型时php不能处理,生成不了$_POST数组,$GLOBALS["HTTP_RAW_POST_DATA"]里和php://input里都是原始数据

php://input在任何情况下均是最原始post来的数据