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

当wsdl将服务端口绑定定义为https和端口80时,PHP SOAP请求失败的解决方法?,php,soap,wsdl,port,soap-client,Php,Soap,Wsdl,Port,Soap Client,我正在使用php5的SOAP扩展使用SOAP web服务。服务的wsdl是使用Axis java2wsdl生成的,生成过程中使用的任何选项都会导致端口绑定url被列为https://xxx.xxx.xxx**:80** 如果我将wsdl下载到我的服务器,从端口绑定位置值中删除端口80规范,并在我的soapclient调用中引用本地文件,那么它就可以正常工作 但是,如果我尝试远程引用它(或者下载它并在本地引用它,就像现在一样),调用就会失败,并出现soap错误 我没有对服务端的输入,所以我不能让他

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

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

但是,如果我尝试远程引用它(或者下载它并在本地引用它,就像现在一样),调用就会失败,并出现soap错误

我没有对服务端的输入,所以我不能让他们更改wsdl生成过程。因此,除非有办法使soapclient不知道端口,否则我只能使用其他人的wsdl的本地修改副本(我不希望这样做)


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

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

$client=newsoapclient(“some.wsdl”,
数组('proxy_host'=>“https://example.org",

'proxy_port'=>443);

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

$client=newsoapclient(“some.wsdl”,
数组('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);

如果找不到更优雅的解决方案,您可以下载文件,替换字符串,然后将其用作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);

有趣的是,假设wsdl的url是,wsdl中的端口绑定是(在本例中,它显然在example.org服务器后面进行了负载平衡)。那么我的代理主机仍然是example.org吗?我可能只需要尝试一下。有趣。那么,假设wsdl的url是,wsdl中的端口绑定是(在这种情况下,它显然在example.org服务器后面进行负载平衡)。那么,我的代理主机仍然是example.org吗?我可能只需要进行实验。您是在对象构造(
new SoapClient()
)上已经遇到soap错误,还是在第一次尝试调用服务的方法时遇到了soap错误?您是在对象构造(
new SoapClient()
)上已经遇到soap错误了吗或者在第一次尝试调用服务的方法时?