我已经尝试了一些可能的解决方案(例如使用ob_),但没有任何运气。
我希望能够显示屏幕的传出请求,以便调试它。
我通过扩展SoapClient和重写像_soapcall()和_doRequest()这样的方法来调试SoapClient。在我的项目中,我有一个记录器,它将XML/参数写入文件。
我的例子包括 _ soapCall () 和 _doRequest () 。我用两种方法打印出不同的东西。可能适合您的调试需求。我喜欢从__soapCall()中读取$args输出,并喜欢将XML复制到SoapUI中进行验证(Alt+V)。如果您正在调试身份验证或其他错误情况,HTTP标头也可能很有趣。
class MySoapClient extends SoapClient {
public function __soapCall ($function_name, array $args, array $options = null, $input_headers = null, array &$output_headers = null) {
// Dump $args to file, browser printout, console, etc
var_dump($args);
parent::__soapCall ($function_name, $args, $options, $input_headers, $output_headers);
// XML request and response:
var_dump($this->__getLastRequest()); // Request sent to server
var_dump($this->__getLastResponse()); // Response from server
// HTTP headers:
var_dump($this->__getLastRequestHeaders());
var_dump($this->__getLastResponseHeaders());
}
public function __doRequest ( string $request , string $location , string $action , int $version, int $one_way = 0 ) {
var_dump($request); // XML
$response = parent::__doRequest ($request, $location, $action, $version, $one_way);
var_dump($response); // XML
return $response;
}
}
$webservice = new MySoapClient('http://example.com/myservice?wsdl');
$webservice->__soapCall('SomeOperation', array($someArguments));
可以使用日志记录器代替var_dump:
logger('debug', $this->__getLastRequest());