Недавно я сменил среду разработки с Windows 10 на Ubuntu 16.04 (виртуальную в vmware player). С тех пор у меня возникли проблемы с вызовами PHP SoapClient. Следующий скрипт хорошо работал под Windows 10 (XAMPP), а также работал на моем онлайн-сервере (Plesk-Onyx под Ubuntu), но не на виртуальной машине.
<?
ini_set ('soap.wsdl_cache_enabled', 0);
ini_set ('soap.wsdl_cache_ttl', 0);
$wsdl_file = 'soap/stage.wsdl';
$soap_param = array (
'location' => 'https://.../Service.asmx',
'local_cert' => 'soap/stage.pem',
'login' => 'USERNAME',
'password' => 'PASSWORD',
'soap_version' => SOAP_1_2,
'exceptions' => True,
'trace' => 1,
'connection_timeout' => 15
);
try {
$soap_client = new SoapClient ($wsdl_file, $soap_param);
$soap_client -> __call ('SOME_FUNCTION', array ()); //failing
} catch (Exception $e) {
echo $e -> getMessage ().'<br>';
}
?>
Строка $soap_client -> __call ('SOME_FUNCTION', array ());
выдает сообщение об ошибке: Could not connect to host
Я пробовал различные исправления, которые нашел в Интернете, но ничего не помогло. SELinux и брандмауэры на гостевой и хост-системе отключены. Что мне не хватает? Заранее спасибо.
ОБНОВЛЕНИЕ:
Я до сих пор не нашел решения. Но при проверке отправленного запроса (с использованием $soap_client -> __getLastRequest ()
и $soap_client -> __getLastRequestHeaders ()
) выясняется, что в заголовке запроса отсутствует следующая информация:
Host: SERVICE_HOST
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.1.1
Content-Type: application/soap+xml; charset=utf-8; action="URL/SOME_FUNCTION"
Content-Length: 208
Authorization: Basic BASE64_STRING
Может ли кто-нибудь подтвердить, что это может быть проблемой?
file_get_contents( 'https://www.google.com' );
или что-то в этом роде. - person MonkeyZeus   schedule 15.03.2018