Raw POST Data PHP 获取 HTTP 原始 body 部分的数据

通常做网站开发时,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。

记录一下,留作日后备查。

Tags: ,

2 comments

Leave a Reply

Your email address will not be published.

*