2016-11-23 75 views
0

這是關於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 
"" 

(該""是空文本佔位符。)

回答

0

的說明,即使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()); 

雖然這對我有用,但我不知道爲什麼會發生這種情況。