yii2-soap-server 在需要http_auth_basic认证时读取不了wsdl的解决思路

yii2-soap-server https://github.com/mohorev/yii2-soap-server 是一个不错的开发包,在加了http_auth_basic认证时,soapclient端调用会报错:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservice.mydomain.com/soap/api.html' : failed to load external entity "http://webservice.mydomain.com/soap/api.html"
这是因为服务器端请求wsdl文件时没有进行登录验证,无法读取。
解决思路,再开一个虚拟机,监听在127.0.0.1:80上,域名webservice.local.mydomain.com ,然后增加一条hosts记录,指向127.0.0.1,该虚机只有本机能访问,不用加auth_basic验证。
然后在SoapController的 actions方法中增加wsdlUrl参数(红字):

return [

'api' => [

'class' => 'mongosoft\soapserver\Action',

'serviceOptions' => [

'disableWsdlMode' => false,

'soapVersion' => '1.1'

],

  'wsdlUrl'=>'http://webservice.local. mydomain.com/soap/api.html',

'serviceVar'=> 'wsdl',

]

];

这样就可以用soapclient正常调用webservice方法了。

$wsdl = 'http://webservice.mydomain.com/soap/api.html';

$client = new \SoapClient($wsdl, [

'login'=>'user','password'=>'123456'

]);

$result = $client->hello('mytest');

var_dump($result);

=======另一个版本========

https://github.com/subdee/yii2-soap-server

发表评论

电子邮件地址不会被公开。 必填项已用*标注