【发布时间】:2015-09-04 14:27:08
【问题描述】:
我正在编写一个服务来接收来自我家中的能源监控设备的数据。设备可以推送数据的唯一方法是使用 HTTP POST,使用Transfer-Encoding: chunked,而不使用Content-Length,并将数据作为请求正文中的 XML。
我希望能够在 PHP 脚本(在 Apache 之后)中读取这些数据并将其存储在我的数据库中。
现在看来,在 PHP 中读取 HTTP 请求正文的最正确方法是打开并读取 php://input。但是,来自 PHP 网站用户的 cmets 表明(并且我的测试证实),如果客户端未指定 Content-Length 标头,php://input 不会返回任何数据(即使客户端以分块编码发送数据) .
是否有其他方法可以访问请求正文?我可以配置 Apache(使用 .htaccess)来解码分块数据并在获得所有数据后调用我的脚本,并包含Content-Length?或者配置 PHP 让它能够处理这个问题?
谢谢!
【问题讨论】:
-
什么版本的 PHP?我记得这是特定于 fastCGI 实现而不是 mod_php。从技术上讲,它们遵循 HTTP 1.1 规范。对于 mod_fcgid,您可以查看 patch。参考:bugs.php.net/bug.php?id=60826
-
啊,我正在使用 PHP 5.6.5 和 FastCGI。我将尝试更改为非快速 CGI(我的网络主机让我选择),看看会发生什么;我会尽快回来报告。
标签: php apache http-headers