我正在使用php5的soap扩展程序来使用SOAP Web服务。服务'wsdl是使用Axis java2wsdl生成的,并且生成期间使用的任何选项都会导致端口绑定URL列为 https ://xxx.xxx.xxx.xxx**:80 **
如果我将wsdl下载到我的服务器,请从端口绑定位置值中删除端口80规范,并在我的soapclient调用中引用本地文件,它可以正常工作。
但是,如果我尝试远程引用它(或者下载并在本地引用它,那么)调用将因soap故障而失败。
我没有输入服务端,所以我不能让他们改变他们的wsdl生成过程。因此,除非有办法让soapclient对端口一无所知,否则我会坚持使用其他人'wsdl的本地修改副本(我宁愿不做)。
有关如何使我的soapclient忽略端口80的任何想法?
答案 0 :(得分:2)
你可能想尝试使用$ options数组覆盖主机名/端口,你可以将它作为第二个参数传递给SoapClient的构造函数:
$client = new SoapClient("some.wsdl",
array('proxy_host' => "https://example.org",
'proxy_port' => 443);
答案 1 :(得分:2)
如果找不到更优雅的解决方案,可以随时下载文件,进行字符串替换,然后将其用作WSDL。
$cached_wsdl_file = './cached_wsdl.xml';
if (filemtime($cached_wsdl_file) > time() - 3600) {
$wsdl = file_get_contents('http://server/service?wsdl');
$wsdl = str_replace('server:80', 'server', $wsdl);
file_put_contents($cached_wsdl_file, $wsdl);
}
$client = new SoapClient($cached_wsdl_file);