Всем привет.
Столкнулся с такой проблемой. Имеется сервер Lotus Domino, при помощи которого поднят WSDL веб-сервис.
Этот веб-сервис использует авторизацию по логину и паролю. То есть, грубо говоря, если я напрямую пробую получить GET-запросом страницу
exampe.com/....?WSDL, то я сначала попадаю на страницу авторизации
example.com/names.nsf?Login, на которой мне предлагается ввести пароль и логин. Если пароль и логин правильные, то путем 302-редиректа мне отдается нормальное содержимое основной страницы веб-сервиса.
При этом при правильном вводе логина и пароля устанавливается кука вида :
DomAuthSessId=XXXXXXXXXX
Кука ставится на рабочий сеанс. Это была преамбула.
Теперь к самой проблеме.
Для использования этого веб-сервиса из PHP я использую (прошу прощения за тавтологию) SoapClient.
Общий механизм использования:
$client = new SoapClient( '
example.com/....?WSDL');
$client->funcName(...params...);
...
На первой же строке я получаю SOAP-исключение о некорректности полученной страницы ?WSDL. Оно и понятно -
куки никак не передаются, и я получаю не WSDL-информацию, а форму для ввода логина и пароля.
Загуглил на тему передачи кук при работе с SOAP. Есть функция $client->__setCookie(), которая позволяет их устанавливать. Но для этого нужен, как минимум, нормально инстанцированный клиент (то есть, переменная $client), а он у меня даже не создается нормально...
Я попробовал самостоятельно перед вызовом new SoapClient() выполнить POST-запрос на URL из формы авторизации и считать куку DomAuthSessId. Значение ее получаю, но вот что с ней потом делать ? Ведь при первом же вызове new SoapClient() будет использовано другое соединение, которое будет требовать куку с другим значением ?
Ситуация вообще непонятная, ведь до создания SoapClient'а значения куки мы знать не можем (она будет известна только после того, как мы пройдем авторизацию).
Подскажите, пожалуйста, как быть ? Может, кто-то сталкивался с чем-то аналогичным ?
Заранее благодарю.