PHP com SOAP + WSDL Re:PHP com SOAP + WSDL

Transcrição

PHP com SOAP + WSDL Re:PHP com SOAP + WSDL
PHP com SOAP + WSDL
Posted by luisv - 2007/04/03 23:24
_____________________________________
Olá,
Antes de mais, parabéns pelo site que desconhecia.
Sou um principiante em WebServices (WS) e também XML e vi-me confrontado recentemente com a necessidade de
consumir WS's de uma aplicação.
Após alguma pesquisa encontrei um recurso escrito em PHP, o NuSOAP (ver http://dietrich.ganx4.com/nusoap/), que faz
a ligação a sites com WSDL (web service description language), com várias opções, e mete os resultados em array muito
bonitinhos, como eu gosto.
Em apenas umas horas consegui consumir os WS's teste de acordo com as necessidades mas para passar a uma fase
de produção o administrador do servidor windows que fornece os WS requer autenticação.
Agora levanto algumas questões:
1. Eu preciso, em primeira instância, de usar IWA (Integrated Windows Authentication). Ora o NuSOAP não suporta nem
NTLM nem Kerberos. Apenas Basic, Digest e Certificate authentication. A aplicação que estou a correr em PHP está
num servidor Apache em Windows. É possível indicar se existe um recurso em php ou algum módulo de Apache (para
windows) que permita fazer esse tipo de autenticação?
2. Supostamente a autenticação Basic devia ser possível com o NuSOAP mas não estou a conseguir. Tenho o erro: "wsdl
error: HTTP ERROR: HTTP authentication failed". Alguém consegue confirmar que este tipo de "auth" é fazível como
NuSOAP?
3. Recorrendo à extensão soap do php "php_soap.dll" consigo fazer a autenticação assim:
$auth_user = "someuser";
$auth_pass = "somepass";
$login = array (
'login' => $auth_user,
'password' => $pdov_auth_pass
);
$wsdl = 'http://someurl.com/someWSBA.asmx?WSDL';
$client = new soapclient($wsdl,$login);
No entanto, o resultado é uma string de código xml com tags schemas e elements, cujo parsing o nuSOAP já faz em
várias centenas de linhas de código e que eu não me aventuro a reescrever pois não percebo nada de xml.
Tenho procurado um recurso em php que me ajude mas não encontro nada. Mais uma vez, pergunto se alguém me
pode dar uma luz?
4. É conhecido algum outro recurso que se equipare ao NuSOAP de que se possa fazer uso?
Mesmo que seja só para o ano, se puderem ajudar...
Cumpºs
Luis
============================================================================
Re:PHP com SOAP + WSDL
Posted by ncosta - 2007/04/04 09:33
_____________________________________
ola luisv,
Dei uma olhada no google sobre os modulos que perguntavas se existem para apache e parece que sim:
http://www.google.co.uk/search?hl=en&q=apache+and+NTLM+authentication+for+windows&meta=
PHP-PT.com Forum - Comunidade Portuguesa de PHP
Joomlaboard Forum Component version: 1.1.4 Stable
Generated: 29 September, 2016, 16:35
http://www.google.co.uk/search?hl=en&q=apache+and+kerberos+authentication+windows&meta=
se nao estas a conseguir autenticar usando o metodo "Basic" com o NuSOAP poderias postar o code, para ver se
alguem pode ajudar.
de qualquer forma parece que existe os modulos que precisas para o Apache, da uma olhada e diz algo.
Abracos
Nuno R. Costa
Post edited by: ncosta, at: 2007/04/04 09:34
============================================================================
Re:PHP com SOAP + WSDL
Posted by luisv - 2007/04/04 17:42
_____________________________________
Obrigado Nuno,
A maioria dos links que aparecem listados no google e outros motores sobre este assunto são how to's de como
"instalar" a autenticação do lado do servidor.
Eu realmente expliquei-me mal..
A minha necessidade existe do lado do utilizador que se quer autenticar:
- Estou a desenvolver uma aplicação num servidor (Apache) usando PHP.
- Nessa aplicação existe um utilizador que necessita de consumir um webservice num servidor remoto.
- Esse servidor remoto necessita que o utilizador se autentique via o meu servidor para permitir o acesso aos WS.
- Essa autenticação tem de ser automática e transparente para o utilizador mediante um código PHP ou outro tipo de hack.
Até ao momento, não encontrei nada nesta linha.
Ainda assim os teus links foram úteis para descobrir os seguintes recursos:
NTLM Authentication Scheme for HTTP
http://www.innovation.ch/personal/ronald/ntlm.html
» É a explicação de como se pode fazer a autenticação mas requer muito código por trás e complexo. Além do algoritmo em
C que apresentam julgo que seja necessário trabalhar com sockets (tirei esta ideia do código fonte do recurso do próximo
link) e não tenho experiência.
Accessing NTLM secured resources with PHP
http://blog.thinkphp.de/archives/125-Accessing-NTLM-secured-resources-with-PHP.html
» Este recurso parece interessante mas além de usar PEAR os comentários de vários utilizadores é de que não
funciona. Se alguém que use isto puder confirmar, agradecia.
Em relação à Basic Authentication com o NuSOAP, o meu código, que não funciona é:
<?php
require_once("nusoap.php"«»);
$wsdl =
"http://user:«»[email protected]/someWS.asmx?WSDL";
# mudei o nome da funcao para nusoapclient para nao
# haver conflito com o dll "php_soap.dll" e nao
# tenho problema com "Anonymous Authentication"
$client = new nusoapclient($wsdl,'wsdl');
print $client->getError();
$proxy = $client->getProxy();
$param = array(); # o WSAction nao tem argumentos
$result = $proxy->WSAction($param);
print_r($result);
?>
PHP-PT.com Forum - Comunidade Portuguesa de PHP
Joomlaboard Forum Component version: 1.1.4 Stable
Generated: 29 September, 2016, 16:35
Cumpºs,
Luis
============================================================================
Re:PHP com SOAP + WSDL
Posted by ncosta - 2007/04/04 19:13
_____________________________________
Nunca trabalhei com NuSOAP mas alguns pontos:
tentas-te num browser: http://nuno:[email protected]/someWS.asmx?WSDL
com os dados corectos, existe algum erro de autenticacao?
qual o verdadeiro problema do xml ?? quando autenticas com o outro metodo, nao percebi ?
caso seja um problema de edicao de xml o porque de nao obter os dados de uma atenticacao de um xml e passa-lo
para o tal xml que tem as tal centenas de linhas de codigo ?
Post edited by: ncosta, at: 2007/04/04 19:15
============================================================================
Re:PHP com SOAP + WSDL
Posted by luisv - 2007/04/05 13:46
_____________________________________
Olá,
Pronto, problema resolvido para Basic Authentication!!
O NuSOAP está em franca expansão mas para aqueles que precisarem (como eu) de autenticação IWA (NTLM ou
Kerberos) ainda vai levar um tempo.
No entanto, o problema de BA consistiu numa grave falha minha!! (:whistle:)
O NuSOAP pode ser tirado de http://sourceforge.net/projects/nusoap/. Foi o que fiz.
O que eu não fiz foi consultar a CVS tree em http://nusoap.cvs.sourceforge.net/nusoap/
A última versão da aplicação disponível para download data de 2005... as versões CVS andam actualizadas, é claro.
Obrigado pelas dicas Nuno.
Vou continuar à procura de uma solução para IWA. Se tiver desenvolvimentos faço o post com a solução.
Cumpºs,
Luis
ps: deixo o código de BAuth para quem se quiser inspirar<?php
# função para debug (o nusoap já tem uma classe "debug" se não estou em erro)
function ddebug() {
global $client;
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request,ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
}
require_once("nusoap.php"«»);
$wsdl = "http://somedomain.com/ws/WS_file.asmx?WSDL";
$client = new nusoapclient($wsdl,'wsdl');
#ddebug();
PHP-PT.com Forum - Comunidade Portuguesa de PHP
Joomlaboard Forum Component version: 1.1.4 Stable
Generated: 29 September, 2016, 16:35
$auth_user = 'some_user';
$auth_pass = 'some_pass';
$client->setCredentials($auth_user,$auth_pass,'basic');
#ddebug();
$param = array();
# WS_Action é um método disponível do WS_file.asmx
$result = $client->call('WS_Action',$param);
#ddebug();
?>
============================================================================
Re:PHP com SOAP + WSDL
Posted by luisv - 2007/04/20 15:56
_____________________________________
Olá,
A versão v1.100 do NuSoap já suporta NTLM. Vou indicar o código que poderão utilizar mas convém verificar o histórico
de modificações antes da sua utilização.
<?php
require_once("nusoap.php"«»);
function ddebug() {
global $client;
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
}
# variables
# --------$wsdl = 'http://somedomain.com:888/somefile.asmx?WSLD';
$ws_auth_user = 'someuser';
$ws_auth_pass = 'somepass';
$ws_auth_method = 'ntlm'; # '' or 'basic' or 'digest' or 'ntlm' (lowercase!!)
# client call
# ----------$client = new nusoap_client($wsdl,'wsdl');
$client->setCredentials($ws_auth_user,$ws_auth_pass,$ws_auth_method);
# ws call
# ------$param = array();
$result = $client->call('WS_action',$param);
# debug
# ----ddebug();
# ws result
# --------$ws_result = $result;
?>
PHP-PT.com Forum - Comunidade Portuguesa de PHP
Joomlaboard Forum Component version: 1.1.4 Stable
Generated: 29 September, 2016, 16:35
Cumpºs
Luis
============================================================================
PHP-PT.com Forum - Comunidade Portuguesa de PHP
Joomlaboard Forum Component version: 1.1.4 Stable
Generated: 29 September, 2016, 16:35

Documentos relacionados

Chat Box em PHP - Comunidade Portuguesa de PHP

Chat Box em PHP - Comunidade Portuguesa de PHP Estava a pensar fazer uma espécie de Chat Box em PHP. Para isso utilizaria um formulário com dois campos, Nick e Mensagem, armazenava os dados na BD e mostrava-os. Para isto já tenho o código feito...

Leia mais