Featured Posts

CentOS LAMP Setup 很土鳖的问题,浪费我几个小时,终于搞定! 在 CentOS 下使用 xampp 的集成套件搭建 LAMP 环境,启动 Apache 后,用浏览器访问 web 程序,居然提示下载源文件!! 也就是...

Readmore

看看我写的 GFW 小故事 我是一个乖孩子,喜欢上网跟朋友们聊天、玩游戏 警察叔叔说,网上很黄很暴力,我却很傻很天真,不让我再看到我最爱的网站 直到有一天,一个无辜的小鸟被无情地封杀,我才意识到问题的严重性 面对河蟹坚硬的钳子,小鸟不能改变什么,唯一能做的,就是送上几句脱口秀解解气 据说那个墙,又黑又高,看到朋友们发来的结构图,我哭了 我再也看不见可爱的...

Readmore

Apache ReWrite QUERY_STRING 问号 ? 看一条应用中简单的 rewrite 规则: 将请求: http://www.leakon.com/soft/install?ver=2.0 rewrite 为: http://www. leakon.com/my/soft/install.php 配置文件 httpd.conf...

Readmore

  • Prev
  • Next

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

Posted on : 16-06-2009 | By : leakon | In : Web开发

2

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

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

Comments (2)

多谢, 很有帮助!

3Qs. it's help to me.

Write a comment