我试过这样的事情:
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:
的开头答案 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>";