当wsdl将服务端口绑定定义为https和端口80时,PHP SOAP请求失败的解决方法?
我正在使用php5的SOAP扩展使用SOAP web服务。服务的wsdl是使用Axis java2wsdl生成的,生成过程中使用的任何选项都会导致端口绑定url被列为https://xxx.xxx.xxx**:80** 如果我将wsdl下载到我的服务器,从端口绑定位置值中删除端口80规范,并在我的soapclient调用中引用本地文件,那么它就可以正常工作 但是,如果我尝试远程引用它(或者下载它并在本地引用它,就像现在一样),调用就会失败,并出现soap错误 我没有对服务端的输入,所以我不能让他们更改wsdl生成过程。因此,除非有办法使soapclient不知道端口,否则我只能使用其他人的wsdl的本地修改副本(我不希望这样做)当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错误 我没有对服务端的输入,所以我不能让他
关于如何使我的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错误了吗或者在第一次尝试调用服务的方法时?