这是关于removing the expect headers的问题的跟进。
我有一个模仿外部端点的模拟肥皂服务器。它是使用php的默认SoapServer
设置的:
$server = new SoapServer('http://externalapi.foo/the_wsdl.xml');
$server->setClass(ExternalApi::class);
$server->handle($HTTP_RAW_POST_DATA);
之前有效的,一旦我删除了客户端中的expect标头,我只会得到一个空的响应,无论请求让我的接受失败:
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
""
(""
是空文本的占位符。)
答案 0 :(得分:0)
king maxemilian on 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());
虽然这对我有用,但我不清楚它为什么会发生。