解决方法为当WSDL定义服务端口为HTTPS和端口80结合PHP SOAP请求失败?(Workaro

2019-08-07 06:36发布

我使用PHP5的SOAP扩展消费SOAP Web服务。 使用Axis的Java2WSDL生成该服务” WSDL和任意选项进行生成结果被列为HTTPS端口绑定URL期间使用://xxx.xxx.xxx.xxx**:80 **

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

但是,如果我尝试远程引用它(或下载并本地引用它,不变化)的调用失败,SOAP错误。

我还没有输入到服务端,所以我不能让他们改变自己的WSDL生成过程。 因此,除非有办法让懵懂SoapClient的港口,我坚持用别人的WSDL的本地的副本(我宁愿不做)。

如何让我忽略SoapClient的80端口有什么想法?

Answer 1:

你可能想尝试使用$ options数组可以传递的第二个参数来SoapClient的构造函数重载主机名/端口:

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



Answer 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);


文章来源: Workaround for PHP SOAP request failure when wsdl defines service port binding as https and port 80?