借助curl理解$GLOBALS['HTTP_RAW_POST_DATA'] ,$_POST, php://input
Posted 梦想远航
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了借助curl理解$GLOBALS['HTTP_RAW_POST_DATA'] ,$_POST, php://input相关的知识,希望对你有一定的参考价值。
发送请求代码
post.php
<?php $url=‘http://localhost/web/curl/url.php‘; $data=‘a=123|b=2&c=3‘; $header=array(); //$header[]="content-type:text/xml"; $ch=curl_init($url); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HTTPHEADER,$header); $con=curl_exec($ch); curl_close($ch); print_r($con);
接收请求的代码
url.php
<?php echo "<h3>HTTP_RAW_POST_DATA:</h3>"; print_r($GLOBALS["HTTP_RAW_POST_DATA"]); echo "<hr><h3>post:</h3>"; print_r($_POST); echo "<hr> <h3>input:</h3>"; print_r(file_get_contents("php://input")); echo "<hr>"; 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来的数据
以上是关于借助curl理解$GLOBALS['HTTP_RAW_POST_DATA'] ,$_POST, php://input的主要内容,如果未能解决你的问题,请参考以下文章
$GLOBALS['value'] 和global 关键字的用法
微信公众号 $GLOBALS['HTTP_RAW_POST_DATA']数据问题
$GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别