0

これは、期待ヘッダーの削除に関する私の質問に関するフォローアップです。

外部エンドポイントを模倣するモック SOAP サーバーがあります。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
""

(""は空のテキストのプレースホルダーです。)

4

1 に答える 1

0

反対票を投じられたにもかかわらず、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());

これは私にとってはうまくいきますが、なぜそれが起こるのかわかりません。

于 2016-11-23T11:32:12.740 に答える