Это продолжение моего вопроса о удаление ожидающих заголовков.
У меня есть фиктивный мыльный сервер, имитирующий внешнюю конечную точку. Это было установлено с использованием по умолчанию SoapServer
из php:
$server = new SoapServer('http://externalapi.foo/the_wsdl.xml');
$server->setClass(ExternalApi::class);
$server->handle($HTTP_RAW_POST_DATA);
который работал раньше, когда я удаляю ожидающий заголовок в клиенте, я получаю только пустой ответ, независимо от того, что запрос заставил меня принять:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: text/html
Date: Wed, 23 Nov 2016 11:18:40 GMT
Server: nginx/1.11.6
Transfer-Encoding: chunked
X-Powered-By: HHVM/3.15.3
""
(The ""
заполнитель для пустого текста.)
Записка, хотя и проголосовала Король Максимилиан на php.net указал мне в правильном направлении. Они написали:
Иногда случается так, что PHP ничего не обнаруживает в
$HTTP_RAW_POST_DATA.
Чтобы решить эту проблему и заставить ее работать в любом случае:
function soaputils_autoFindSoapRequest() { global $HTTP_RAW_POST_DATA; if($HTTP_RAW_POST_DATA) return $HTTP_RAW_POST_DATA; $f = file("php://input"); return implode(" ", $f); } $server = new SoapServer($wsdl); $server->setClass($MyClass); $server->handle(soaputils_autoFindSoapRequest());
Я упростил это для моего ложного мыльного сервера, чтобы
/**
* @return string
*/
function findSoapRequest() {
$f = file("php://input");
return implode(" ", $f);
}
$server->handle(findSoapRequest());
Хотя это работает для меня, я понятия не имею, почему это происходит.
Других решений пока нет …