1

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

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

但是,如果我尝试远程引用它(或下载它并按原样在本地引用它),调用将失败并出现肥皂错误。

我对服务端没有任何意见,所以我不能让他们改变他们的 wsdl 生成过程。所以,除非有办法让soapclient不知道端口,否则我会坚持使用其他人的wsdl的本地修改副本(我宁愿不这样做)。

关于如何让我的 soapclient 忽略端口 80 的任何想法?

4

2 回答 2

2

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

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

于 2009-09-17T15:57:08.103 回答
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);
于 2009-11-09T01:33:01.260 回答