这几天做了服务器的php版本升级,由5.4升级到5.6.19,其他部分都没问题,结果发现https的webservice证书调用失败,报:failed to load external entity错误,代码都没动过,初步判断升级后导致的,于是本地还原到5.4 果然又好使了。
以前调用代码为:
$params = array('id' => '2'); $local_cert = "./client-cer.pem"; set_time_limit(0); try{ //ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache $wsdl='https://192.168.1.146:8443/pro/ws/getInfoService?wsdl'; // echo file_get_contents($wsdl); $soap=new SoapClient($wsdl, array( 'trace'=>true, 'cache_wsdl'=>WSDL_CACHE_NONE, 'soap_version' => SOAP_1_1, 'local_cert' => $local_cert, //client证书信息 'passphrase'=> 'client', //密码 // 'allow_self_signed'=> true ) ); $result=$soap->sayHello($params); $result_json= json_encode($result); $result= json_decode($result_json,true); echo '结果为:' . json_decode($result['return'],true); }catch(Exception $e) { $result['success'] = '0'; $result['msg'] = '请求超时'; echo $e->getMessage(); } echo '>>>>>>>>>>>';
根据官方解释如下:
After migrating to PHP 5.6.5, the soap 1.2 did not work anymore. So I solved the problem by adding optional parameters SSL. My error: failed to load external entity How to solve: // options for ssl in php 5.6.5 $opts = array( 'ssl' => array('ciphers'=>'RC4-SHA', 'verify_peer'=>false, 'verify_peer_name'=>false) ); // SOAP 1.2 client $params = array ('encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_2, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts) ); $oSoapClient = new SoapClient ( $url . "?WSDL", $params );
所以更改代码为:
$opts = array ( 'ssl' => array ( 'ciphers' => 'RC4-SHA', 'verify_peer' => false, 'verify_peer_name' => false ) ); // SOAP 1.2 client $params = array ( 'encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create ( $opts ), 'local_cert' => $local_cert, // client证书信息 'passphrase' => 'client' // 密码 ); ; $soap = new SoapClient ( $wsdl, $params );
开始按这个做也报错,后来把soap_1_2更改为soap_1_1 好使了
相关推荐
调用https协议的webservice,以及证书手动加载。
webservice,soap调用, webservice,soap,积分接口调用,qq webservice调用
java 调用https发布的webservice接口实例及axis包及详细说明
JAVA 调用SAP SOAP webservice需要注意的一些坑,请务必按步骤一步步来。
客户端调用webservice的方式其一 soap请求,此例子演示的是根据订单号获取订单的物流信息
java项目简单模拟soap型的webservice远程调用服务,内附使用说明文档方便学习和查阅,让你轻松学会soap-webservice的使用方法!
PHP使用SOAP调用WEBSERVICE接口
SOAP调用webservice例子,一个用SOAP调用webservice的例子
SOAP_Client 一款iphone webService得工具挺好用
Java调用php的webservice: header("Content-Type:text/html;charset=UTF-8"); // require('lib/nusoap.php'); require_once("lib/nusoap.php"); $server = new soap_server(); $server->configureWSDL('...
PB9 通过soap方法调用webservice,例子中源码文件夹中有soapsdk 安装包,通过soap调用webservice需要先安装soapsdk环境。
超简单的webservice调用demo,对hutool工具进行简单的封装,只需要输入webservice接口名、接口参数即可进行webservice接口调用,欢迎大家吐槽
SoapClient调用WCF服务,自己碰到的一些问题,特来分享
VS2013、C++语言、SOAP实现调用webservice接口,接口包括上传文件、日志、获取消息等等。全部源码+DEMO示例
C#实现SOAP调用WebService
本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599
php soapclient 访问java service server
Soap WebService 调试工具
Java使用SOAP获取webservice实例解析 具体实例分析说明。
C#调用Java的webservice