Насколько я знаю, нет простого способа сказать SoapClient использовать другой.Если необходимо изменить только с http
на https
, а все остальные вещи равны, вы можете переопределить какой-либо метод своим собственным классом:
class HttpsPortSoapClient extends Soapclient {
function __doRequest($request,$location,$action,$version,$one_way = 0 ){
$locationparts = parse_url($location);
if(isset($locationparts['scheme']) && $locationparts['scheme'] == 'http'){
if(function_exists('http_build_url')){
$location = http_build_url($locationparts,array('scheme'=>'https'));
} else {
//the long way around:
$location = 'https://';
if(isset($locationparts['user'])){
$location .= $locationparts['user'];
if(isset($locationparts['pass']))$location .= ':'.$locationparts['pass'];
$location .= '@';
}
if(isset($locationparts['host'])) $location .= $locationparts['host'];
if(isset($locationparts['port'])) $location .= ':'.$locationparts['port'];
if(isset($locationparts['path'])) $location .= $locationparts['path'];
if(isset($locationparts['query'])) $location .= '?'.$locationparts['query'];
}
}
return parent::__doRequest($request,$location,$action,$version,$one_way);
}
}
Если методы действительно отличаются, выхотите переопределить метод __construct
и загрузить XML, а также очистить или удалить все ссылки на порт http вместо ссылки https.Хотя это все больше и больше похоже на написание собственного мыльного клиента:)