Ir al contenido


Foto

WebService - Obtener el XML que envia y recibe


  • Por favor identifícate para responder
7 respuestas en este tema

#1 apicito

apicito

    Advanced Member

  • Miembros
  • PipPipPip
  • 104 mensajes

Escrito 29 enero 2012 - 03:07

Vuelvo para preguntar sobre un web service que tengo montado gracias a la ayuda de la gente del foro:
http://www.delphiacc...e-y-tremotable/
Lo que necesito ahora, y le he dado muchas vueltas, es como puede obtener el XML de Request y Response del webservice. Puede ser desde la parte cliente o desde la parte servidor.
Me refiero a poder leerlo ya que tengo algun problema con clientes que lo consumen desde php y quería comparar lo que me llega desde php con lo que me llega desde un cliente delphi que funciona correctamente.
Gracias de antemano.

  • 0

#2 apicito

apicito

    Advanced Member

  • Miembros
  • PipPipPip
  • 104 mensajes

Escrito 30 enero 2012 - 01:53

Me autocontesto:
Me baje esta utilidad que permite hacer snifer de http:
http://www.ieinspect...yzer/index.html
De todas formas, si alguien sabe como leerlo directamente desde el ws de delphi que nos ilustre. Por el saber  no ocupa lugar y desocupa mucho tiempo.
Un saludo.
  • 0

#3 apicito

apicito

    Advanced Member

  • Miembros
  • PipPipPip
  • 104 mensajes

Escrito 16 febrero 2012 - 11:00

Reabro este tema porque después de muchos días rompiendome la cabeza y probando varias tecnologias: curl,soap nativo php, nusoap.. no he conseguido consumir un web service con php cuando utilizo una clave en la cabecera.
Desde un cliente hecho en delphi funciona correctamente y si en el servidor desactivo el control de la clave en la cabecera funciona desde delphi y desde php.
Este es el xml que envia el cliente delphi:


delphi
  1. <?xml version="1.0" ?>
  2. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  3.   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  4.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.   xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  6. <SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  7. xmlns:NS1="urn:PadronServizoImpl">
  8. <NS1:TSecurityHeader xsi:type="NS1:TSecurityHeader">
  9. <Identificacion xsi:type="xsd:string">
  10. clave
  11. </Identificacion>
  12. </NS1:TSecurityHeader>
  13. </SOAP-ENV:Header>
  14. <SOAP-ENV:Body xmlns:NS2="urn:PadronServizoIntf-IPadronServizo"
  15.   SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  16.   xmlns:NS3="urn:PadronServizoIntf">
  17. <NS2:getEmpadroado>
  18. <lista xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="NS3:TRexistro[1]">
  19. <item href="#2" />
  20. </lista>
  21. </NS2:getEmpadroado>
  22. <NS3:TRexistro id="2" xsi:type="NS3:TRexistro">
  23. <tipo xsi:type="xsd:string">D</tipo>
  24. <documento xsi:type="xsd:string">99999999H</documento>
  25. <resposta xsi:type="xsd:string"></resposta>
  26. </NS3:TRexistro>
  27. </SOAP-ENV:Body>
  28. </SOAP-ENV:Envelope>


y con este código php en el que trato de reproducir el xml anterior:
<?php
require_once('lib/nusoap.php');
$client = new nusoap_client( "http://www.aaaa.com/cgi-bin/Ws.dll/wsdl/IPadronServizo","wsdl");
$header = '
<TSecurityHeader xsi:type="TSecurityHeader">
<Identificacion xsi:type="xsd:string">
clave
</Identificacion>
</TSecurityHeader>
';
$client->setHeaders($header);
$body = '
<lista xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="TRexistro[1]">
<item href="#2" />
</lista>'.
'<TRexistro id="1" xsi:type="TRexistro">
<tipo xsi:type="xsd:string">D</tipo>
<documento xsi:type="xsd:string">99999999H</documento>
<resposta xsi:type="xsd:string"></resposta>
</TRexistro>';
$result = $client->call('getEmpadroado',$body);
if ($client->fault) {
    echo '<h2>Fault</h2><pre>';
    print_r($result);
    echo '</pre>';
} else {
    $err = $client->getError();
    if ($err) {
        echo '<h2>Error</h2><pre>' . $err . '</pre>';
    } else {
        echo '<h2>Result</h2><pre>';
        print_r($result);
    echo '</pre>';
    }
}
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
?>

obtengo este resultado:
Request


delphi
  1. POST /cgi-bin/eurocidadanWs2.dll/soap/IPadronServizo HTTP/1.0
  2. Host: [url=http://www.verin.net]www.verin.net[/url]
  3. User-Agent: NuSOAP/0.9.5 (1.123)
  4. Content-Type: text/xml; charset=ISO-8859-1
  5. SOAPAction: "urn:PadronServizoIntf-IPadronServizo#getEmpadroado"
  6. Content-Length: 1043
  7.  
  8. <?xml version="1.0" encoding="ISO-8859-1"?>
  9. <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns7700="urn:PadronServizoIntf-IPadronServizo"><SOAP-ENV:Header>
  10. <TSecurityHeader xsi:type="TSecurityHeader">
  11. <Identificacion xsi:type="xsd:string">
  12. clave
  13. </Identificacion>
  14. </TSecurityHeader>
  15. </SOAP-ENV:Header><SOAP-ENV:Body><ns7700:getEmpadroado xmlns:ns7700="urn:PadronServizoIntf-IPadronServizo">
  16. <lista xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="TRexistro[1]">
  17. <item href="#2" />
  18. </lista>
  19. <TRexistro id="1" xsi:type="TRexistro">
  20. <tipo xsi:type="xsd:string">D</tipo>
  21. <documento xsi:type="xsd:string">34726246H</documento>
  22. <resposta xsi:type="xsd:string"></resposta>
  23. </TRexistro>
  24. </ns7700:getEmpadroado>
  25. </SOAP-ENV:Body>
  26. </SOAP-ENV:Envelope>


Response


delphi
  1. HTTP/1.1 200 OK
  2. Connection: close
  3. Date: Thu, 16 Feb 2012 16:36:54 GMT
  4. Server: Microsoft-IIS/6.0
  5. X-Powered-By: ASP.NET
  6. Content-Type: text/xml; charset="utf-8"
  7. Content-Length: 439
  8.  
  9. <?xml version="1.0"?>
  10. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  11. <SOAP-ENV:Body>
  12. <SOAP-ENV:Fault>
  13. <faultcode>
  14. SOAP-ENV:Server
  15. </faultcode>
  16. <faultstring>
  17. Clave Incorrecta
  18. </faultstring>
  19. <faultactor/>
  20. </SOAP-ENV:Fault>
  21. </SOAP-ENV:Body>
  22. </SOAP-ENV:Envelope>



  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 16 febrero 2012 - 11:28

Según lo que le indicas :

xmlns:ns7700="urn:PadronServizoIntf-IPadronServizo"

deberías hacer esto:


    <ns7700:TSecurityHeader xsi:type="TSecurityHeader">
        <Identificacion xsi:type="xsd:string">
            clave
        </Identificacion>
      </ns7700:TSecurityHeader>


Saludos
  • 0

#5 apicito

apicito

    Advanced Member

  • Miembros
  • PipPipPip
  • 104 mensajes

Escrito 16 febrero 2012 - 12:00

El "ns7700" lo genera el php, no se lo meto yo. Si se lo pongo a pelo me dice:

Fault

Array
(
    [faultcode] => SOAP-ENV:Server
    [faultstring] => Referencia a un prefijo de espacio de nombres no declarado: 'ns7700'.

Line: 2
   


  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 16 febrero 2012 - 12:03

El "ns7700" lo genera el php, no se lo meto yo. Si se lo pongo a pelo me dice:

Fault

Array
(
    [faultcode] => SOAP-ENV:Server
    [faultstring] => Referencia a un prefijo de espacio de nombres no declarado: 'ns7700'.

Line: 2
   


Ah caray, entonces debe ser dinámico, lamentablemente de PHP no te puedo decir mas.

Saludos
  • 0

#7 apicito

apicito

    Advanced Member

  • Miembros
  • PipPipPip
  • 104 mensajes

Escrito 16 febrero 2012 - 02:13

Gracias por intentarlo, tendré que ir a preguntar a algún sitio php.

  • 0

#8 apicito

apicito

    Advanced Member

  • Miembros
  • PipPipPip
  • 104 mensajes

Escrito 19 febrero 2012 - 03:57

Bueno, despues de dedicarle unas cuantas horas más a buscar una solución... la he encontrado.
En vez de utilizar nusoap, que actualmente está descontinuado en php, he utilizado las clases nativas de php para soap:
http://www.php.net/m...s/book.soap.php
y el siguiente código:
<?php
$cliente = new soapclient( 'http://www.aaaa.com/cgi-bin/Ws.dll/wsdl/IPadronServizo',
        array(  'trace'      => 1,
                'exceptions' => 1));

$cabeceiraCorpo = array('Identificacion' => 'clave');
$cabeceira =  new SoapHeader("urn:PadronServizoImpl","TSecurityHeader" ,$cabeceiraCorpo);
$cliente->__setSoapHeaders(array($cabeceira));

$r1 = array(
'tipo' => 'D',
'documento' => '99999999H',
'resposta' => '');
$r2 = array(
'tipo' => 'T',
'documento' => 'X8888888E',
'resposta' => '');

$lista = array();
$lista[] = $r1;
$lista[] = $r2;

$corpo = new SoapParam($lista, 'lista');

print_r($corpo);
echo '<br><br>';

$result = $cliente->getEmpadroado($corpo);

print_r($result);

echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($cliente->__getLastRequest(), ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($cliente->__getLastResponse(), ENT_QUOTES) . '</pre>';
?>

Espero que esto ayude a alguien en el futuro.
  • 0




IP.Board spam blocked by CleanTalk.