PHP HTTP Post Server - 无法获得发布请求

时间:2014-11-09 23:04:01

标签: php http post request

因此,我正在为学校开展一个小组项目,我们正在与一个希望使用各种配套应用程序的客户一起使用他的公司设备。我们为设备提供主机IP或域,并且每隔5秒左右以XML的形式发送HTTP Post请求。我们遇到的问题是我们不知道如何捕获我们服务器上发送的数据。只是尝试抓取并转储所有$ _POST数据会产生一个空数组,而我们尝试使用套接字会产生类似的结果。

我们已尝试将设备指向http://posttestserver.com/ - 它可以完美地获取数据,但是没有可用的源代码来查看网站的运行方式。不可否认,我们对服务器端脚本的了解最多,因为我们只使用PHP几个月,而且这不是已经涵盖的内容。

上面提到的后期服务器产生以下输出(一些省略的隐私数据)。任何帮助复制这个或只是帮助我们的服务器上获取数据将不胜感激!

Time: Sun, 09 Nov 14 14:20:26 -0800
Source ip: ######

Headers (Some may be inserted by server)
HTTP_CONNECTION = close
REQUEST_URI = /post.php
QUERY_STRING = 
REQUEST_METHOD = POST
GATEWAY_INTERFACE = CGI/1.1
REMOTE_PORT = ######
REMOTE_ADDR = ######
CONTENT_LENGTH = 488
CONTENT_TYPE = application/xml
HTTP_USER_AGENT = Raven Uploader/v1
HTTP_FROM = ######
HTTP_ACCEPT = */*
HTTP_HOST = posttestserver.com
HTTPS = on
UNIQUE_ID = VF-oqtBx6hIAACKZ7j0AAAAH
REQUEST_TIME_FLOAT = 1415571626.7993
REQUEST_TIME = 1415571626

No Post Params.

== Begin post body ==
<?xml version="1.0"?><clientcompany macId="######" version="1.1" timestamp="1415571625s">
<PriceCluster>
  <DeviceMacId>######</DeviceMacId>
  <MeterMacId>######</MeterMacId>
  <TimeStamp>0x1bf2a52d</TimeStamp>
  <Price>0x00000467</Price>
  <Currency>0x007c</Currency>
  <TrailingDigits>0x04</TrailingDigits>
  <Tier>0x01</Tier>
  <StartTime>0x1bf2a52d</StartTime>
  <Duration>0xffff</Duration>
  <RateLabel>Block 2</RateLabel>
</PriceCluster>

</clientcompany>

== End post body ==

Upload contains PUT data:
<?xml version="1.0"?><clientcompany macId="0xd8d5b90016d1" version="1.1" timestamp="1415571625s">
<PriceCluster>
  <DeviceMacId>######</DeviceMacId>
  <MeterMacId>######</MeterMacId>
  <TimeStamp>0x1bf2a52d</TimeStamp>
  <Price>0x00000467</Price>
  <Currency>0x007c</Currency>
  <TrailingDigits>0x04</TrailingDigits>
  <Tier>0x01</Tier>
  <StartTime>0x1bf2a52d</StartTime>
  <Duration>0xffff</Duration>
  <RateLabel>Block 2</RateLabel>
</PriceCluster>

</clientcompany>

2 个答案:

答案 0 :(得分:1)

您需要捕获原始输入流:

//$data = $_POST; <-- will be empty unless you are sending a key value pair(s)
$data = file_get_contents('php://input'); //<-- will capture all posted data
echo '== Begin post body ==';   
echo $data;
echo '== End post body ==';

如果您还需要查看标题,可以使用getallheaders函数:http://php.net/manual/en/function.getallheaders.php

答案 1 :(得分:0)

而不是$ _POST检查$ HTTP_RAW_POST_DATA var