gpt4 book ai didi

php - 在/不发送请求之前检查由 PHP SoapClient 调用创建的 XML

转载 作者:IT王子 更新时间:2023-10-29 00:57:45 28 4
gpt4 key购买 nike

问题:有没有办法在您实际发送请求之前查看将使用 PHP SoapClient 函数调用创建的 XML?

背景:

我是 WSDL 通信的新手,我有一个客户希望我用 PHP 进行开发,这是一种与用 ASP.NET 编写的 WSDL 服务进行通信的方法。我已经走了很远,但是在传递复杂类型时遇到了问题。到目前为止,我已经尝试了几种不同的方法。

1) 设置单个数组如$params->Person->name $params->Person->address

2) 设置单个数组 $Person = array('name'=>"joe",'address' = "123");

然后作为参数 "Person"=> $Person; 传递给调用和其他一些人。但是每次我得到错误

SoapException: Server was unable to process request ---> System.Exception: Person is Required. at service name.

为了进一步排除故障,我希望查看正在发送的 XML 文档,以查看它是否正在按照我期望的方式创建复杂类型。我正在使用 $client = new SoapClient('wsdldoc.asmx?WSDL'); 创建服务,然后使用 $client->CreateUser($params); 调用它尝试使用函数 $client->__getLastRequest(); 查看它,但它永远不会到达 __getLastRequest,因为它在调用 CreateUser($params) 时遇到 fatal error 。

问题又来了:有什么方法可以查看由 CreateUser($params) 调用创建的 XML,而无需实际发送它并导致 fatal error

最佳答案

前言:为了使用__getLastRequest()方法成功,您必须在客户端构造时将 'trace' 选项设置为 true:

$client = new SoapClient('wsdldoc.asmx?WSDL', array('trace' => TRUE));

这样,您的请求仍将被发送(因此仍然失败),但您可以通过调用 $client-> 检查发送的 xml 之后 __getLastRequest().


主要答案:

要在发送请求之前/不访问生成的 XML,您需要子类化 SoapClient 以覆盖 __doRequest()方法:

class SoapClientDebug extends SoapClient
{
public function __doRequest($request, $location, $action, $version, $one_way = 0) {
// Add code to inspect/dissect/debug/adjust the XML given in $request here

// Uncomment the following line, if you actually want to do the request
// return parent::__doRequest($request, $location, $action, $version, $one_way);
}
}

然后在调试问题时,您将使用这个扩展类而不是原来的 SoapClient。

关于php - 在/不发送请求之前检查由 PHP SoapClient 调用创建的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626423/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com