Расширение php SoapClient для проверки подлинности на сайтах

Укороченная версия

Я хочу расширить SoapClient чтобы он делал это внутри, когда SoapClient к WSDL:

 curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl 

Длинная версия

У меня есть SOAP-запрос, подобный этому:

 $serviceUrl = 'https://service-url'; $wsdl = $serviceUrl . '?wsdl'; $proxyServiceUrl = 'http://localhost/myproxy.php?url=$serviceUrl'; $proxyWsdl = 'http://localhost/myproxy.php?url=$wsdl'; $options = array( 'cache_wsdl' => WSDL_CACHE_NONE, 'encoding' => 'utf-8', 'soap_version' => SOAP_1_1, 'exceptions' => true, 'trace' => true, 'location' => $proxyServiceUrl ); $client = new SoapClient($proxyWsdl, $options); $params = array( /* */ ); $client->someOperation($params); 

Как вы можете видеть, все довольно стандартно, за исключением прокси-бит.

Причина для прокси

Я написал прокси-сервер, чтобы выполнить требование поставщика веб-услуг о том, чтобы все конечные точки, включая WSDL, обрабатывались через систему аутентификации под названием siteminder.

Функция прокси-сервера достаточно проста, если она написана в линейной командной строке linux, это будет примерно так:

 curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl 

Точнее:

 * Follow all redirections * specify location of .pem file (and password) * specify location of cookie jar 

Все это прекрасно работает 🙂

Но недавно поставщик услуг решил изменить WSDL.

Теперь он импортирует файлы схемы ( .xsd ), что не так уж плохо, за исключением того, что оно относится к WSDL.

Относительно файла WSDL означает, что парсер SoapClient теперь ищет файлы схемы из местоположения прокси. ОШИБКА, не можете найти!

Подробнее об этой проблеме можно узнать здесь:

Ошибка php SoapClient при передаче wsdl с относительными схемами пути

Итак, мой вопрос:

Как я могу переписать SoapClient (конечно, SoapClient его), чтобы продолжить аутентификацию siteminder, но без необходимости проходить через этот дополнительный прокси?

Мои первоначальные мысли состоят в том, что я как-то должен переписать функцию доступа к URI (если она существует), но без большой документации в этой области я не уверен, с чего начать.

В качестве альтернативы, мне может потребоваться взломать SoapServer .

Я был бы признателен за любую помощь, которую я могу получить, включая указатели на любую документацию во внутреннюю часть SoapClient .

Solutions Collecting From Web of "Расширение php SoapClient для проверки подлинности на сайтах"

Если это вопрос поставки файла .pem, просмотрели ли вы параметр local_cert для конструктора SoapClient? Затем этот клиентский объект должен сохранить все файлы cookie, установленные для сеанса. Если вам нужно также сохранять файлы cookie через сеансы, вы всегда можете их прочитать из ответа (используйте __getLastResponseHeaders ), а затем используйте __setCookie чтобы снова установить их в следующий раз.

Или вы можете просто заставить свой прокси заменить относительные пути абсолютными путями. В конце концов, wsdl сам является XML-документом.

Или вы можете превратить свой прокси в фактический прокси-сервер и использовать параметры proxy_host, proxy_port, proxy_login и proxy_password.

Ответ на эту проблему может быть найден здесь:

http://rabaix.net/ru/articles/2008/03/13/using-soap-php-with-ntlm-authentication .

Благодаря Джеффри Фернандесу в списке почтовых рассылок php, который указал на это.