如何从 PHP 发布 SOAP 请求
2022-08-30 09:58:34
有谁知道我如何从PHP发布SOAP请求?
根据我的经验,这并不是那么简单。内置的 PHP SOAP 客户端无法与 .我们必须使用基于NET的SOAP服务器。它抱怨架构定义无效。即使.NET客户端与该服务器一起工作也很好。顺便说一句,让我声明 SOAP 互操作性是一个神话。
下一步是NuSOAP。这工作了很长一段时间。顺便说一句,看在上帝的份上,不要忘记缓存WSDL!但是,即使使用WSDL缓存用户,该死的事情也很慢。
然后,我们决定使用裸HTTP,组装请求并读取响应,如下所示:SimpleXMLElemnt
$request_info = array();
$full_response = @http_post_data(
'http://example.com/OTA_WS.asmx',
$REQUEST_BODY,
array(
'headers' => array(
'Content-Type' => 'text/xml; charset=UTF-8',
'SOAPAction' => 'HotelAvail',
),
'timeout' => 60,
),
$request_info
);
$response_xml = new SimpleXMLElement(strstr($full_response, '<?xml'));
foreach ($response_xml->xpath('//@HotelName') as $HotelName) {
echo strval($HotelName) . "\n";
}
请注意,在 PHP 5.2 中,您需要pecl_http,因为(surprise-surpise!) 没有内置 HTTP 客户端。
使用裸HTTP在SOAP请求时间内为我们赢得了超过30%的时间。从那时起,我们将所有性能投诉重定向到服务器人员。
最后,我会推荐后一种方法,而不是因为性能。我认为,一般来说,在像PHP这样的动态语言中,WSDL/type-control没有任何好处。您不需要一个花哨的库来读取和编写XML,以及所有存根生成和动态代理。您的语言已经是动态的,并且工作正常,并且非常易于使用。此外,您将拥有更少的代码,这总是好的。SimpleXMLElement
PHP 支持 SOAP。只需致电
$client = new SoapClient($url);
连接到 SoapServer,然后你可以获取函数列表并调用函数,只需执行...
$client->__getTypes();
$client->__getFunctions();
$result = $client->functionName();