PHP HTTP Почтовый сервер - не могу получить почтовые запросы

0

Поэтому я работаю над групповым проектом для школы, и мы работаем с клиентом, который хочет, чтобы сопутствующее приложение было со своим устройством. Мы предоставляем устройству IP-адрес хоста или домен, и он отправляет HTTP-запросы в виде XML каждые 5 секунд или около того. Проблема, с которой мы сталкиваемся, заключается в том, что у нас нет идеи, как собирать данные, отправляемые на нашем сервере. Просто попытка захвата и сброса всех данных $ _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>
Теги:
post
http
request

2 ответа

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

  • 0
    Это определенно звучит как то, что должно быть сделано ... но сервер все еще ничего не получает. Я запустил это в файле с именем post.php и указываю на устройство ip / post.php. (так же, как мы сделали с вышеупомянутым сайтом, который работал). Есть ли что-то еще, что мне нужно сделать, чтобы заставить это работать - широкий вопрос, который я знаю. Спасибо!
  • 0
    @echo Как вы проверяете ответ с сайта? Возможно, вам следует записать $ data в файл? Не видя, как вы отправляете запрос, очень трудно помочь.
Показать ещё 2 комментария
0

вместо $ _POST проверить $ HTTP_RAW_POST_DATA var

Ещё вопросы

Сообщество Overcoder
Наверх
Меню