PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在PHP中进行SOAP调用并设置SSL版本大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经做了几个脚本与外部WSDL一起工作.我遇到一个我必须整合到我的系统,我无法上班.我一直在尝试一周没有任何结果.

脚本在创建构造函数时失败:

$client = new SoapClient("https://webtjener09.kred.no/TestWebservice/OppdragserviceSoaphttpPort?WSDL");

给出错误

PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://webtjener09.kred.no/TestWebservice/OppdragserviceSoaphttpPort?WSDL' : Failed to load external entity "https://webtjener09.kred.no/TestWebservice/OppdragserviceSoaphttpPort?WSDL"

我已经安装了openssl并使用PHP,并记住我已经通过SSL对其他WSDL进行了其他工作的SOAP调用.我发现我无法使用证书解决这个问题,因为它已经在构造函数中失败了.

但:
我尝试使用openssl命令行连接到远程服务器,并且此命令也失败:

openssl s_client -connect webtjener09.kred.no:443 -state

但是,我试图强制它到SSL3,它的工作完美,像这样:

openssl s_client -ssl3 -connect webtjener09.kred.no:443 -state

所以让我想到我必须匹配SSL版本的远程服务器.要双重检查,我也尝试通过PHP进行cURL连接,并且失败,直到我添加了强制SSL版本,如下所示:

curl_setopt($ch,CURLOPT_SSLVERSION,3);

将CURLOPT_SSLVERSION添加到cURL连接使其可以.然后我的问题的根源:

如何强制PHP soap构造函数/调用也使用SSL3.在我看来,这将是解决方案.但是我还没有找到如何将PHP SOAP函数设置为仅使用SSL3.既然命令行-openssl-和PHP cURL都强制使用SSL3,那么我认为我的SOAP函数会发生同样的事情?

输入?

(使用Ubuntu Linux,PHP 5.3.3)

我有同样的问题,以下包装解决了(我不得不强制SSL2)
class stupidWrapperForOracleServer extends SoapClient {
  protected function callCurl($url,$data,$action) {
     $handle   = curl_init();
     curl_setopt($handle,CURLOPT_URL,$url);
     curl_setopt($handle,CURLOPT_httpHEADER,Array("Content-Type: text/xml",'SOAPAction: "' . $action . '"'));
     curl_setopt($handle,CURLOPT_RETURNTRANSFER,truE);
     curl_setopt($handle,CURLOPT_POSTFIELDS,$data);
     curl_setopt($handle,2);
     $response = curl_exec($handlE);
     if (empty($responsE)) {
       throw new SoapFault('CURL error: '.curl_error($handlE),curl_errno($handlE));
     }
     curl_close($handlE);
     return $response;
   }

   public function __dorequest($request,$LOCATIOn,$action,$version,$one_way = 0) {
       return $this->callCurl($LOCATIOn,$request,$action);
   }
 }

便说一句.如果在下载WSDL文件部分时失败,则手动下载WSDL(例如使用卷曲),并在本地使用该文件.在WSDL下载阶段,不调用IMHO __dorequest.

file_put_contents(dirname(__FILE__) .'/Server.wsdl',get_wsdl()); //get_wsdl uses the same wrapper as above
$oWS = new stupidWrapperForOracleServer(dirname(__FILE__) .'/Server.wsdl',array('trace'=>1,'cache_wsdl'=>0));

大佬总结

以上是大佬教程为你收集整理的在PHP中进行SOAP调用并设置SSL版本全部内容,希望文章能够帮你解决在PHP中进行SOAP调用并设置SSL版本所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。