Php 如何转储SoapClient请求以进行调试?
我需要调试一些使用soap客户端的代码。我在php.net中找到了getLast*方法,但当我尝试获取调试的最后一个请求时,它返回NULLPhp 如何转储SoapClient请求以进行调试?,php,soap,Php,Soap,我需要调试一些使用soap客户端的代码。我在php.net中找到了getLast*方法,但当我尝试获取调试的最后一个请求时,它返回NULL <?php $client = new SoapClient("http://www.webservicex.net/ConverPower.asmx?WSDL"); $response = $client->ChangePowerUnit(array( "PowerVal
<?php
$client = new SoapClient("http://www.webservicex.net/ConverPower.asmx?WSDL");
$response = $client->ChangePowerUnit(array(
"PowerValue" => 100,
"fromPowerUnit" => "horsepower",
"toPowerUnit" => "megawatts"
));
echo "====== REQUEST HEADERS =====" . PHP_EOL;
var_dump($client->__getLastRequestHeaders());
echo "========= REQUEST ==========" . PHP_EOL;
var_dump($client->__getLastRequest());
echo "========= RESPONSE =========" . PHP_EOL;
var_dump($response);
?>
如何获取上一个SoapClient请求的正文和标题的内容?只有在创建SoapClient对象时,跟踪选项设置为TRUE才有效
尝试:
调试SOAP请求
$client = new MySoapClient($wsdlUrl, array('trace' => 1));
然后运行封装在try-catch块中的SOAP调用:
try{
$result = $client->__SoapCall('routeCase', $params);
}catch (\Exception $e){
throw new \Exception("Soup request failed! Response: ".$client->__getLastResponse());
}
在PHP中开发SOAP解决方案时,最好在WSDL契约更改时清理PHP tmp文件夹(请参阅phpinfo()
中的tmp
文件夹路径),以强制PHP SOAP客户端再次下载WSDL和XSD文件,而不是使用缓存文件(直到它们过期)
此外,在开发时设置异常
和缓存wsdl
以及soap_版本
等选项非常有用:
$options = array(
'soap_version'=>SOAP_1_2,
'exceptions'=>false,
'trace'=>1,
'cache_wsdl'=>WSDL_CACHE_NONE
);
*使用SOAP扩展进行调试的缺点是证书错误发生在实际请求之前。因此,当出现某种连接故障时,不可能使用getLastRequest()或getLastResponse()
$client = new SoapClient(
'http://example.loc/index.php/api/v2_soap/?wsdl'
);
$client->__setCookie('XDEBUG_SESSION', 'NETBEANS');
基本错误信息也可以在PHP日志和web服务器日志中找到。确保已打开完整的错误日志记录。我只是将其打包以供操作:
$client = new \SoapClient("http://127.0.0.1/services/wsdl2",array('trace' => 1,));
try{
$result = $client->__SoapCall('routeCase', $params);
}catch (\Exception $e){
throw new \Exception("Soup Request Failed! Response:\n".$client->__getLastResponse());
}
尽管@xdazz是正确的,但我强烈建议您也添加
“异常”=>0
添加到SoapClient方法中的参数中,这样即使收到错误的响应,您也可以查看正在进行的调用。我添加了这一点,因为这经常出现,唯一的答案没有添加上下文。在PHP中开发SOAP解决方案时,清理PHP tmp文件夹也是一个好主意
非常感谢您的帮助缓存信息,我不知道,这对我很有帮助!
$client = new SoapClient(
'http://example.loc/index.php/api/v2_soap/?wsdl'
);
$client->__setCookie('XDEBUG_SESSION', 'NETBEANS');
$client = new \SoapClient("http://127.0.0.1/services/wsdl2",array('trace' => 1,));
try{
$result = $client->__SoapCall('routeCase', $params);
}catch (\Exception $e){
throw new \Exception("Soup Request Failed! Response:\n".$client->__getLastResponse());
}