2

我正在尝试使用 SOAP 中的一个函数,该函数将获取有关特定新闻项目的详细信息。问题是我没有得到预期的结果,只是一个奇怪的错误。我在 PHP5 中使用内置的 SOAP 客户端。

我的错误是:

致命错误:未捕获的 SoapFault 异常:[Client] SOAP-ERROR: Encoding: E​​xternal reference ' https://newsclient.omxgroup.com/cdsPublic/viewDisclosure.action?disclosureId=379485&messageId=454590 ' in /home/***** ***/public_html/********/updatenews3.php:15

我的代码是:

<?php
    $login = '***';
    $password = '***';   
    $client = new SoapClient(
    'https://newsclient.omxgroup.com/wsdl/DisclosureNewsService.wsdl',
    array(
        'login' => $login,
        'password' => $password
    ));
    $param = array('lastPublicationId' => 361825);
    $result = $client->fetchNews($param);
?>

找到结果的所有 lastPublicationId 的错误都是相同的。似乎 PHP 正在尝试加载一个链接,该链接位于 XML 回复中的某处(错误消息中的 URL),并且无法访问它。尽管我已经用谷歌搜索了很多,但我找不到任何解决方案。我唯一能找到的是这似乎已被报告为以前版本的 PHP 中的错误,但错误是指 PHP 5.2.2 因为我使用的是 PHP 5.2.9,所以我认为它可以'不是那样。我怀疑 & 字符是导致此错误的原因?

可以在此处找到 WSDL 文件:https ://newsclient.omxgroup.com/wsdl/DisclosureNewsService.wsdl

有人知道这个错误,并且知道任何解决方案吗?

4

1 回答 1

2

返回的 XML 可能$client->fetchNews($param);没有正确转义 - 错误消息中显示的 URL 中似乎有一个未转义的 &。

最好的办法可能是通过打开跟踪和打印最后一个响应来准确检查返回的 XML:

$client = new SoapClient(
'https://newsclient.omxgroup.com/wsdl/DisclosureNewsService.wsdl',
array(
    'login' => $login,
    'password' => $password,
    'trace' => 1
));
$param = array('lastPublicationId' => 361825);

try {
    $result = $client->fetchNews($param);
}
catch (SoapFault $sf) {
    print '<pre>';
    // print the exception
    print_r($sf);

    // print the XML response
    print $client->__getLastResponse();
}

一种解决方法(如果服务器返回无效的 XML)是使用与上述类似的代码来捕获异常。然后,您可以手动获取返回的 XML(使用__getLastResponse()),并自己清理它(例如使用 htmlenties 或正则表达式),然后返回它并在应用程序的其余部分使用它。

于 2010-01-07T14:44:17.797 回答