Я пытаюсь получить wsdl с удаленного сервера веб-службы через класс php SoapClient, однако в моем php-скрипте возникает фатальная ошибка за исключением: «Дополнительное содержимое в конце документа»
После некоторого тестирования через cURL, я заметил, что при попытке доступа к "https://remote -server / XIEservice? Wsdl " происходит перенаправление на "https://remote -server / login-login.shtml? / WS / XIEservice% 3fwsdl".
Затем я понял, что для доступа к wsdl мне нужно сохранить куки-файл сессии, сгенерированный после страницы входа.Что-то, что у меня есть с cURL ниже:
// 1st step
$ ch = curl_init ('https://remote-server/WS/XIEservice');
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ ch, CURLOPT_HEADER, 1);
curl_setopt ($ ch, CURLOPT_POST, 1);
curl_setopt ($ ch, CURLOPT_POSTFIELDS, "form = login-form & dest =% 2FWS% 2FXIEService & user = <user> & pwd = <password>");
$ result = curl_exec ($ ch);
curl_close ($ ch);
// Save the cookie session
preg_match_all ('/ ^ Set-Cookie: \ s * ([^;] *) / mi', $ result, $ matches);
$ cookie = array ();
foreach ($ matches [1] as $ item) {
parse_str ($ item, $ c);
$ cookie = array_merge ($ cookie, $ c);
}
// 2nd step
$ ch = curl_init ('https://remote-server/WS/XIEservice?wsdl');
curl_setopt ($ ch, CURLINFO_HEADER_OUT, 1);
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ ch, CURLOPT_COOKIESESSION, 1); //
curl_setopt ($ ch, CURLOPT_COOKIE, http_build_query ($ cookie));
$ result = curl_exec ($ ch);
curl_close ($ ch);
print_r ($ result);
Тем не менее, я не получил тот же сеанс cURL в SoapClient, потому что, хотя я пропускаю cookie через stream_context, cookie не является постоянным и теряется во время перенаправлений довы достигаете 'https://remote -сервер / WS / XIEservice? wsdl '.