发送请求代码
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
<?phpecho "<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执行结果
Array ( [a] => 123|b=2 [c] => 3 )
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";
执行结果是
a=123|b=2&c=3
Array ( )
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来的数据