У меня есть приложение PHP, работающее в Google App Engine. Я пытаюсь сделать запрос веб-службы SOAP 1.2 от клиента PHP на удаленный хост. Я получаю следующее сообщение об ошибке при создании SoapClient используя код ниже:App Engine PHP-приложение не удалось создать SoapClient
$opts = array(
'https'=>array('user_agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'),
'ssl' => array('verify_peer'=>false, 'verify_peer_name' => false)
);
$context = stream_context_create($opts);
$params = array (
'encoding' => 'UTF-8',
'verifypeer' => false,
'verifyhost' => false,
'soap_version' => SOAP_1_2,
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 30,
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_MEMORY
);
libxml_disable_entity_loader(false);
$client = new \SoapClient("https://<host_ip_address>/webservice.asmx?wsdl", $params);
ошибка, что я получаю:
ERROR: SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from '<host_ip_address>/webservice.asmx?wsdl' : failed to load external entity "<host_ip_address>/webservice.asmx?wsdl"
Я подтвердил, что были загружены следующие модули:
php --info
Soap Client => enabled
...
XML Support => active
...
OpenSSL support => enabled
...
И мой файл php.ini в корневой папке приложения содержит:
google_app_engine.enable_functions = "libxml_disable_entity_loader"
extension = “curl.so”
Мой проект GAE также имеет выставление счетов. Любые советы о том, что я могу сделать для успешного создания SoapClient, очень ценятся. Я могу подключиться к веб-сервису через CURL и SoapUI, поэтому я предполагаю, что нет ничего плохого в веб-сервисе.
Должен ли '' заменяться фактическим IP-адресом или именем хоста сервера, на котором размещена служба SOAP? –
snakecharmerb
в качестве альтернативы, если вы скрываете '' от SO по соображениям конфиденциальности, можете ли вы посетить 'https: // /webservice.asmx? Wsdl' в своем веб-браузере? Он возвращает файл 'wsdl'? –
snakecharmerb
Привет @snakecharmerb ... Спасибо за ваши материалы. Да, я маскировал хост и ip-адрес для соображений конфиденциальности, и да, я смог получить файл wsdl, если я перейду к URL-адресу из браузера. – EthanS