通常做网站开发时,POST 数据都是从页面 form 表单中提交到服务器,POST Data 都是 key_1=value_1&key_2=value_2 这样的形式。这样的字符串,PHP 会自动解析到 $_POST 数组中。
有另外一种应用场景,在开发基于 HTTP 协议的接口时,客户端把一段 XML 文本直接作为 POST Data 提交到服务器,这时 $_POST 是空数组。大家可以试试,用 Curl 实现 POST 请求,BODY 字段直接写上一段文本。
通过 WireShark Network Analyzer 这样的软件抓包,可以看到 HTTP 的 Header 之后,有 0d 0a 0d 0a 共 4 个字符,也就是 \r\n\r\n,代表 2 个 Windows 平台的换行符。这是 HTTP Header 与 Body 之间的分割标志。在这之后,Body 的内容可以提交给服务器,但 $_POST 变量为空。
发现问题后立刻头大,这可怎麽办啊!!
在 Google 用 ‘php post raw’ 这个关键词搜了一下,立刻找到答案,原来解决方法是如此的简单:
$strRawData = file_get_contents(“php://input”);
php://input 是一个资源标识,用 file_get_contents 从这个资源中获取的内容,就是原始的 Raw POST Data。
记录一下,留作日后备查。
多谢, 很有帮助!
3Qs. it’s help to me.