如何通过PHP中的SOAP访问Web服务?

时间:2014-11-24 09:44:42

标签: php web-services soap

我试过这样的事情:

  try{

    $opts = array(
        'http'=>array(
            'user_agent' => 'PHPSoapClient'
            )
        );

    $context = stream_context_create($opts);
    $client = new SoapClient('http://83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem?wsdl',
                             array('stream_context' => $context,
                                   'cache_wsdl' => WSDL_CACHE_NONE));

                             ));
    print_r($client);
}
catch(Exception $e){
    echo $e->getMessage();
}

我的var_dump函数的结果是: SOAP-ERROR:解析WSDL:无法加载....无法加载外部实体...

如何通过soap访问Web服务?谢谢。

这是xml:enter image description here

的开头

2 个答案:

答案 0 :(得分:0)

首先: 您提供的URL需要基本身份验证。使用HTTP基本身份验证时,PHP只会在调用服务时发送凭据,而不是在获取WSDL时。

You CAN get a wsdl, if basic authentication is required

$login = 'xxx'; 
$password = 'xxx';

$client = new SoapClient(
     'http://' . urlencode($login) . ':' . urlencode($password) . '@83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem?wsdl',
     array(
         'login' => $login,
         'password' => $password
     ) 
);

其次: 您的返回XML看起来不像有效的WSDL文件。阅读SoapClient documentation page以了解正确用法 - new SoapClient()的第一个参数必须是WSDL文件的URI或null用于非WSDL用法。 (这是一个example of WSDL file)您可能需要在非WSDL模式下创建SoapClient吗?

答案 1 :(得分:0)

我刚刚从83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem?wsdl下载了该文件。我用wsdl格式保存了它,现在我得到了函数

$client = new SoapClient("WebItem.wsdl", array('proxy_host'     => "83.166.204.26",
                                            'proxy_port'     => 7147,
                                            'proxy_login'    => "xxxxxx",
                                            'proxy_password' => "xxxxxxxx"));
echo "<pre>"; var_dump($client->__getFunctions()); echo "</pre>";