为什么我的模拟肥皂服务器只返回空字符串?

问题描述:

这是关于removing the expect headers的问题的后续处理。为什么我的模拟肥皂服务器只返回空字符串?

我有一个模拟肥皂服务器模仿外部端点。它的成立,通过使用默认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 
"" 

(该""是空文本占位符。)

的说明,即使downvoted,通过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()); 

虽然这对我有用,但我不知道为什么会发生这种情况。