我大约一年前编写了一个脚本来通过PHP Soap客户端访问服务,它运行得很好。代码没有投入生产,因为当时不需要。快进到几天前,现在相同的代码不起作用。对系统的唯一更改是更新/升级。
我觉得它与Soap客户端的代理部分有关。
以下是停止工作的代码(URL替换为X')
$soapClient = new SoapClient('XXXX?wsdl', array('proxy_host' => self::PROXYHOST, 'proxy_port' => self::PROXYPORT));
错误:
致命错误:未捕获的SoapFault异常:[WSDL] SOAP-ERROR:解析WSDL:无法从' XXXX加载?wsdl' :无法加载外部实体" XXXX?wsdl"在...
现在,如果我通过CURL运行如下相同的URL,我会得到预期的Soap XML响应:
$mycurl = curl_init();
curl_setopt ($mycurl, CURLOPT_PROXY, self::PROXYHOST.':'.self::PROXYPORT);
curl_setopt ($mycurl, CURLOPT_URL, 'XXXX?wsdl');
echo curl_exec($mycurl);
curl_close($mycurl);
输出:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="XXXX" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="XXXX" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="XXXX">
<s:element name="Login">
<s:complexType>
<s:sequence>
....
最后,如果我将Soap客户端脚本复制到不使用代理的服务器,它将按预期工作,没有问题。
PHP版本是5.5.9-1ubuntu4.11
我已经阅读了每个StackOverflow问题,我发现该问题属于某些问题并无法找到解决方案。
有什么想法吗?谢谢。