PHP SOAP Client Class에서 생성된 실제 XML을 보려면 어떻게 해야 합니까?
다음 SOAP Client 스크립트 예제를 참조하십시오.
$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을 확인해야 합니다.
사용합니다. 마지막 SOAP 요청에서 보낸 XML을 반환합니다.
echo "REQUEST:\n" . $SOAP->__getLastRequest() . "\n";
또한 이 메서드는 SoapClient 개체가 다음을 사용하여 생성된 경우에만 작동합니다.trace
옵션 설정TRUE
따라서 개체를 만들 때 다음 코드를 사용합니다.
$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 TCPMON Standalone 또는 eclipse*와 같은 기능을 사용할 수 있습니다.
*Google의 첫 번째 히트작에 링크하기만 하면 됩니다.
퀸 코멘던트의 대답의 문제는,$request
부터__doRequest()
그런 다음 에 의해 처리됩니다.__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()
또는 기타 관련 기능.
언급URL : https://stackoverflow.com/questions/3572414/how-do-i-see-the-actual-xml-generated-by-php-soap-client-class
'programing' 카테고리의 다른 글
열 "dbo" 또는 사용자 정의 함수 또는 집계 "dbo"를 찾을 수 없습니다.splitfn" 또는 이름이 모호함 (0) | 2023.08.15 |
---|---|
스크롤로 인해 응답 테이블 내부의 부트스트랩 버튼 드롭다운이 표시되지 않음 (0) | 2023.08.15 |
jQuery: $.ajax.error 메서드 내에서 HTTP 상태 코드를 가져오는 방법은 무엇입니까? (0) | 2023.08.15 |
원인: 빌드Output.apkData는 null일 수 없습니다. (0) | 2023.08.15 |
100% CPU를 사용하는 W3WP.EXE - 어디서부터 시작해야 합니까? (0) | 2023.08.15 |