Задать вопрос

Что может быть не так с SOAP, если по cURL доступ есть?

Есть некий wsdl сервер, допустим "https://192.168.333.3/LNetworkServer/LNetworkServi..." (адрес для поста выдуманный).

В браузере открывается нормально.

Когда пробую использовать SOAP, выдает ошибку:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://sh333skd1-dev/LNetworkServer/LNetworkService.svc?wsdl=wsdl0' : failed to load external entity "https://sh333skd1-dev/LNetworkServer/LNetworkService.svc?wsdl=wsdl0"


Если пробую cURL, ошибок нет, спокойно получаю XML.

Разработчики молчат, дали мне такой код:
$wsdl = "https://192.168.333.3/LNetworkServer/LNetworkService.svc?wsdl";
    	$arrContextOptions=array(
		    'ssl'=>array(
		        'verify_peer'=>false,
		        'verify_peer_name'=>false,
		        'allow_self_signed' => true
		    ),
			'https' => array(
                'curl_verify_ssl_peer'  => false,
                'curl_verify_ssl_host'  => false)
		);
    	$options =array(
	    'trace' => 1,
    	'soap_version' => SOAP_1_1,
    	'location'=>'https://192.168.333.3/LNetworkServer/LNetworkService.svc',
    	'exceptions' => 1,
    	'cache_wsdl'=>WSDL_CACHE_NONE,
    	'verifypeer' => false,
        'verifyhost' => false,
    	'stream_context' => stream_context_create($arrContextOptions),
    	'login'=>'root', 'password'=>'1234' ,
    	'classmap' => array('AcsEmployeeSaveData' => "AcsEmployeeSaveData")
    	);
        //подключение 
	$client = new SoapClient($wsdl, $options);


Сам пробовал такой вариант:

try {
    $opts = array(
		    'ssl'=>array(
		        'verify_peer'=>false,
		        'verify_peer_name'=>false,
		        'allow_self_signed' => true
		    ),
			'https' => array(
                'curl_verify_ssl_peer'  => false,
                'curl_verify_ssl_host'  => false,
            	'user_agent' => 'PHPSoapClient',
                'allow_self_signed' => true
			)
    );
    $context = stream_context_create($opts);

    $wsdlUrl = 'https://192.168.333.3/LNetworkServer/LNetworkService.svc?wsdl';
    $soapClientOptions = array(
	    'trace' => 1,
    	'location'=>'https://192.168.333.3/LNetworkServer/LNetworkService.svc',
    	'exceptions' => 1,
    	'cache_wsdl'=>0,
    	'verifypeer' => false,
        'verifyhost' => false,
    	'stream_context' => $context,
    	'login'=>'root', 'password'=>'1234' ,
    	'classmap' => array('AcsEmployeeSaveData' => "AcsEmployeeSaveData")
    );

    $client = new SoapClient($wsdlUrl, $soapClientOptions);
}
catch(Exception $e) {
	echo $e->getMessage();
}


Оба варианта выдают одинаковую ошибку, описанную выше

SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://sh333skd1-dev/LNetworkServer/LNetworkService.svc?wsdl=wsdl0' : failed to load external entity "https://sh333skd1-dev/LNetworkServer/LNetworkService.svc?wsdl=wsdl0"


В чем проблема?
  • Вопрос задан
  • 9586 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Вам нужно проверить адрес $wsdl = "https://192.168.333.3/LNetworkServer/LNetworkServi..."; он должен открываться в обычном браузере.
При помощи CURL вы отправляете конверт SOAP или просто делаете запрос GET/POST?
возможно вы формируете не верный конверт у себя, приведите фрагмент WSDL той функции к которой обращаетесь, и конверт SOAP который отправляете
Ответ написан
@hack0013
Поставте
ini_set('default_socket_timeout', 10000);
перед $client = new SoapClient($wsdl, $options);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы