SOAPクライアントスクリプト:
$SOAP = new SoapClient($WDSL); // Create a SOAP Client from a WSDL
// Build an array of data to send in the request.
$Data = array('Something'=>'Some String','SomeNumber'=>22);
$Response = $SOAP->DoRemoteFunction($Data); // Send the request.
最後の行では、PHPは指定した配列から引数を取り、WSDLを使用して、送信するXMLリクエストを作成し、送信します。
PHPを取得して、ビルドされた実際のXMLを表示するにはどうすればよいですか?
アプリケーションのトラブルシューティングを行っていますが、リクエストの実際のXMLを確認する必要があります。
getLastRequest
を使用します。最後のSOAP要求で送信されたXMLを返します。
echo "REQUEST:\n" . $SOAP->__getLastRequest() . "\n";
また、このメソッドが機能するのは、trace
オプションをTRUE
に設定してSoapClientオブジェクトが作成された場合のみです。したがって、オブジェクトを作成するときは、次のコードを使用します。
$SOAP = new SoapClient($WDSL, array('trace' => 1));
$SOAP = new SoapClient($WSDL, array('trace' => true));
$Response = $SOAP->DoRemoteFunction($Data);
echo "REQUEST:\n" . htmlentities($SOAP->__getLastRequest()) . "\n";
これは最後のリクエストを印刷しませんが、ブラウザでxmlタグを表示します
実際に接続せずにリクエストを表示したい場合は、SoapClientの__doRequest
XMLを返すメソッド:
class DummySoapClient extends SoapClient {
function __construct($wsdl, $options) {
parent::__construct($wsdl, $options);
}
function __doRequest($request, $location, $action, $version, $one_way = 0) {
return $request;
}
}
$SOAP = new DummySoapClient('http://example.com/?wsdl', array('trace' => true));
echo $SOAP->GetRequestDetail($params);
Quinnの答えを拡張して、リクエストを実行する前にリクエストを記録することもできます。
class SoapClientDebug extends SoapClient
{
public function __doRequest($request, $location, $action, $version, $one_way = 0)
{
error_log("REQUEST:\n" .$request . "\n");
error_log("LOCATION:\n" .$location . "\n");
error_log("ACTION:\n" .$action . "\n");
error_log("VERSION:\n" .$version . "\n");
error_log("ONE WAY:\n" .$one_way . "\n");
return parent::__doRequest($request, $location, $action, $version, $one_way);
}
}
SoapClientを作成するときに、トレースを有効にする必要があります。そのようです:
$SOAP = new SoapClient($WSDL, array('trace' => true));
$Data = array('Something'=>'Some String','SomeNumber'=>22);
次に、XMLを表示するためのサービス呼び出しを行った後に__getLastRequestメソッドを呼び出します。
$Response = $SOAP->DoRemoteFunction($Data);
echo $SOAP->__getLastRequest();
これにより、リクエストXMLが出力されます。
もっと読む: http://www.php.net/manual/en/soapclient.getlastrequest.php
クライアントをローカルで実行している場合、 Fiddler は、ワイヤ上のメッセージを見るための優れた実装に依存しない方法です。
リモートで実行している場合は、 Apache TCPMONStandalone または Eclipse *を使用できます。
* Google からの最初のヒットにリンクするだけ
Quinn Comendant's answerの問題。__doRequest()
からの_$request
_が__call()
によって処理され、ユーザーには実際のパラメーターではなくパラメーターの配列が表示されます。 xmlリクエスト。これを防ぐには、次のような回避策を使用できます。
_class DummySoapClient extends SoapClient {
function __construct($wsdl, $options) {
parent::__construct($wsdl, $options);
}
function __doRequest($request, $location, $action, $version, $one_way = 0) {
throw new Exception($request);
}
function __call($function_name, $arguments)
{
try {
parent::__call($function_name, $arguments);
} catch (Exception $e) {
return $e->getMessage();
}
}
}
_
オプションtrace
はここでは必要ありません。__getLastRequest()
または他の関連する関数を呼び出さないためです。