PHP SOAP不起作用,但wget有效

时间:2014-02-20 14:44:57

标签: php web-services soap

我必须向SOAP Web服务发出请求,并且我成功使用了以下代码。

$client = new SoapClient('http://myhost.foo/ws/ws.asmx?WSDL', 
    array('cache_wsdl' => false,
          'trace' => false,
          'exceptions'=>false,
          'soap_version' => SOAP_1_2));

$params['method']['param'] = $somedata;
$params['method']['clientIP'] = $_SERVER['REMOTE_ADDR'];

$result = $client->__soapCall('method', $params);

这些天我在第一行代码处开始收到以下错误:

PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load 
from 'http://myhost.foo/ws/ws.asmx?WSDL' : Start tag expected, 
'<' not found

尝试调试问题,我使用wget测试了webservice并且响应是正确的。

wget http://myhost.foo/ws/ws.asmx?WSDL --post-file=post.xml 
--header="Content-Type: text/xml" -O response.xml

我想知道我在这行上做错了什么:     $ client = new SoapClient('http://myhost.foo/ws/ws.asmx?WSDL',         array('cache_wsdl'=&gt; false,               'trace'=&gt;假,               '例外'=&GT;假,               'soap_version'=&gt; SOAP_1_2));

修改

如果我获取WSDL内容并放入xml文件并在本地使用它,一切正常。

$client = new SoapClient('wsdl.xml', array(
    'location'=> 'http://myhost.foo/ws/ws.asmx', 
    'uri'=> 'http://tempuri.org/', 
    'soap_version' => SOAP_1_2, 
    'trace' => true, 
    'cache_wsdl' => WSDL_CACHE_NONE, 
    'keep_alive' => false));

1 个答案:

答案 0 :(得分:0)

如果问题刚刚开始,则表明数据源方面发生了一些变化。

我建议确保没有更改SSL证书或数据格式。在这种情况下,wget仍然可以工作,而SOAP则不会。