通常情况,PHP获取上游传来的参数,即外部变量,使用
$_POST、$_GET、$_REQUEST
就可以了。
其中,$_REQUEST 是个组合体,默认情况包含了 $_GET,$_POST 和 $_COOKIE。
GET 方式我们知道,通过 URL 传递参数(又叫 query string),只要你的URL带有 query string 就没啥问题;
POST 方式就有点复杂了,$_POST 中获取变量的前提是,发起请求的 Content-Type
必须得是 application/x-www-form-urlencoded 或 multipart/form-data
格式;
因为一般用PHP处理的是网页请求,上面这两种格式都是默认的,所以没啥问题;
而一旦用PHP给第三方提供接口时,就会遇到另一种情况:
第三方使用的 Content-Type 不是上面提到的两种。
纯接口常用的一般是 application/json 格式,当然还有 text/xml、text/plain、stream 等其他类型;
这个情况用 $_GET(或者$_REQUEST) 只能获取第三方写在URL中的参数(该数组不仅仅对GET请求生效,所有带 query string 的请求都可以),而 json 格式的参数,就无能为力了。
这就要用到 file_get_contents('php://input')
了;php://input
允许读取【请求方】的原始数据, 适用于大多数类型的 Content-type,不止是上面提到的几种,但不能用于 multipart/form-data 类型。
也就是说,当 Content-Type 为 application/x-www-data-urlencoded 时,php://input
获取的数据,和 $_POST 获取的数据一致。
言而总之:
- 如果用 $_POST、$_GET、$_REQUEST 获取不到参数时,可以用
php://input
打印一下原始数据瞅瞅; - 如果和 第三方 对接接口,尽量用
file_get_contents('php://input')
比较稳妥;
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net