PHP调用wsdl接口实例化SoapClient抛出异常

Posted ^wxp_幸福女孩儿$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP调用wsdl接口实例化SoapClient抛出异常相关的知识,希望对你有一定的参考价值。

异常:Message:SOAP-ERROR: Parsing WSDL: Couldn\'t load from \'http://*****?wsdl\' : failed to load external entity "http://****?wsdl"。
 
本地调用接口正常,放到服务器上以后,出现了500错误。try{}cache(){}:
 
     try{
          $client=new SoapClient($wsdl);
        }catch(Exception $e){
          echo \'Message:\'.$e->getMessage();
       }
抛出异常:Message:SOAP-ERROR: Parsing WSDL: Couldn\'t load from \'http://*****?wsdl\' : failed to load external entity "http://****?wsdl"。
   首先确认,服务器php环境配置和本地一样。也百度了很多解决办法,都没起作用,请教了接口的开发者.NET 工程师。发给一张截图:

 

   解决办法:$client=new SoapClient($wsdl);这句代码前添加libxml_disable_entity_loader(false); 问题就这样解决了。
查libxml_disable_entity_loader()作用: Disable the ability to load external entities(禁用加载外部实体的能力)。
SoapClient在我的代码里面确实是外部的实体,我不禁用加载外部实体的能力,就可以实例化SoapClient。问题也就自然而然的解决了。

PHP调用Web services接口实例:

    $url=\'http://****?wsdl\';

    $client = new SoapClient($url);
    $param = array("param1"=>$param1,"param2"=>$param2);

   方法1:
     $p = $client->__soapCall(\'functionname\',array("parameters"=>$param));        
     $arr= json_decode($p->functionnameResult,true);    

  方法2:

    $ret2 = $client->functionname($param);  
    $actjson=$ret2->functionnameResult;
    $arr=json_decode($actjson,true);

   return $arr;

 
 

以上是关于PHP调用wsdl接口实例化SoapClient抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

WebService SOAP WSDL UDDI 使用php的curlPHP5的SoapClient实现同步

在发送请求之前/不发送请求之前检查由 PHP SoapClient 调用创建的 XML

PHP SoapClient over selfsigned certificate,SOAP-ERROR:解析WSDL:无法从'https://加载

使用php soapclient工具包显示访问netsuite wsdl无法加载wsdl

python 有没有php里面的soapclient这样的东西

PHP 5 soapClient 结果为空 __getLastResponse 显示正确的 XML