当wsdl将服务端口绑定定义为https和端口80时,PHP SOAP请求失败的解决方法?

StackOverflow https://stackoverflow.com/questions/1439615

我正在使用php5的soap扩展程序来使用SOAP Web服务。服务'wsdl是使用Axis java2wsdl生成的,并且生成期间使用的任何选项都会导致端口绑定URL列为 https ://xxx.xxx.xxx.xxx**:80 **

如果我将wsdl下载到我的服务器,请从端口绑定位置值中删除端口80规范,并在我的soapclient调用中引用本地文件,它可以正常工作。

但是,如果我尝试远程引用它(或者下载并在本地引用它,那么)调用将因soap故障而失败。

我没有输入服务端,所以我不能让他们改变他们的wsdl生成过程。因此,除非有办法让soapclient对端口一无所知,否则我会坚持使用其他人'wsdl的本地修改副本(我宁愿不做)。

有关如何使我的soapclient忽略端口80的任何想法?

有帮助吗?

解决方案

你可能想尝试使用$ options数组覆盖主机名/端口,你可以将它作为第二个参数传递给SoapClient的构造函数:

$client = new SoapClient("some.wsdl", array('proxy_host' => "https://example.org", 'proxy_port' => 443);

其他提示

如果找不到更优雅的解决方案,可以随时下载文件,进行字符串替换,然后将其用作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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top