SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from

最近用PHP 5.3版本的webservice 不知道是不是有BUG,soap client 报错,不是每次哦,大约每20次左右访问有一次出错. 

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://example.com/wsdl?WSDL' : failed to load external entity "http://example.com/wsdl?WSDL" in /var/www/vip.37ad.com/application/class/PPCClient.php:25 Stack trace: #0

 

测试代码里增加set_error_handler查看错误信息

 

PHP代码
  1. <?php   
  2. $wsdl = "http://example.com/wsdl?WSDL";   
  3. $accesskey = "123456";   
  4. $namespace = "http://example.com/wsdl?WSDL";   
  5.   
  6. set_error_handler('err_handler');   
  7. $client = new SoapClient($wsdl,array('trace'=> true,    
  8.                                 'exceptions'=>true,   
  9.                                 'cache_wsdl'=>WSDL_CACHE_NONE   
  10.                         ));   
  11.   
  12. $soapheader = new SoapHeader ($namespace"accesskey"$accesskey );   
  13. $parameters = array('id'=>4001818655,'extension'=>1123);   
  14. $result = $client->__soapCall ( "getTransfer"$parameters, NULL,    
  15.                                                 $soapheader$soapheaderout );   
  16. var_dump($result);   
  17.   
  18. function err_handler(){   
  19.         $error = func_get_args();   
  20.         if ($error[0]==2) {   
  21.                 echo $error[0]."        ".$error[1]."   ".$error[2]."   ".$error[3]."\n";   
  22.                 exit;   
  23.         }   
  24.         //If I change exit to return ****,there is no core.   
  25.         //return true;    
  26. }  

得到如下错误码

2 SoapClient::SoapClient(http://example.com/wsdl?WSDL): failed to open stream: HTTP request failed!

 

我用CURL去请求这个URL是没有问题的.所以没有办法用了nusoap可能效率会打些折扣

 

PHP代码
  1. <?php   
  2. $timeoffset = 8;   
  3. if(function_exists('date_default_timezone_set')) {   
  4.         @date_default_timezone_set('Etc/GMT'.($timeoffset > 0 ? '-' : '+').(abs($timeoffset)));   
  5. }   
  6. require_once("nusoap/nusoap.php");   
  7. $msnClient = new nusoap_client("http://example.com/wsdl?WSDL""wsdl");   
  8.   
  9. $headers = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com/wsdl?WSDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Header><ns1:accesskey>123456</ns1:accesskey></SOAP-ENV:Header></SOAP-ENV:Envelope>';   
  10.   
  11. $parameters = array('id'=>4001818655,'extension'=>1123);   
  12.   
  13. $msnClient->setHeaders($headers);   
  14. $data = $msnClient->call("getTransfer",$parameters);   
  15. var_dump($data);  

如果有朋友有同样问题的也可一试.如果有朋友发现是什么BUG的能告知,更是感谢.

Tags: soap , webservice

上一篇: mysql忽视大小写+插入的效率   下一篇: nginx和php输出wav文件流被截断

你问我答

  1. #1 头像 丁南 2011-07-25 00:55:06
    我这里也和你一样。不知如何是好啊。

提交疑问

回顶部