2016-11-23 1 views
0

Dies ist ein Follow-up in Bezug auf meine Frage zu removing the expect headers.Warum gibt mein Pseudo-Soap-Server nur eine leere Zeichenfolge zurück?

Ich habe einen Mock-Soap-Server, der den externen Endpunkt nachahmt. Es wurde unter Verwendung des Standard-SoapServer von PHP einrichten:

$server = new SoapServer('http://externalapi.foo/the_wsdl.xml'); 
$server->setClass(ExternalApi::class); 
$server->handle($HTTP_RAW_POST_DATA); 

, die vorher gearbeitet, wenn ich entfernen Sie das erwartet Header in dem Client, ich nur eine leere Antwort zurück, unabhängig von der Anfrage meiner Annahme zu machen scheitern:

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 
"" 

(die "" ist Platzhalter für leeren Text.)

Antwort

0

die Notiz, obwohl Downvoted, von king maxemilian on php.net mir in der richtigen Richtung. Sie schrieben:

Manchmal passiert es, dass PHP nicht erkennt alles in $HTTP_RAW_POST_DATA.

Um dieses Problem zu lösen, und es auf jeden Fall funktioniert:

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()); 

ich das vereinfachte für meinen Pseudo-Seifenserver zu

/** 
* @return string 
*/ 
function findSoapRequest() { 
    $f = file("php://input"); 
    return implode(" ", $f); 
} 

$server->handle(findSoapRequest()); 

Während dies für mich funktioniert, habe ich keine Ahnung, warum es passiert ist.

Verwandte Themen