Ver Mensaje Individual
  #6 (permalink)  
Antiguo 29/11/2010, 11:12
Avatar de Snaft_J1
Snaft_J1
 
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 18 años
Puntos: 8
Respuesta: Como puedo ver el header enviado en soap?

ummmm, ok.

pero te recuerdo que en la clase mySoap se sobre escribe el metodo __doRequest desde el cual podrias obtener las headers, ahora si lo que quieres es explorarlo mediante php se podria hacer algo adicional como lo que sigue:

nota: me tome un ratito y he modificado la clase publicada en el post que mensionas para anexarte una forma en la que se podria extraer el header.
Código PHP:
Ver original
  1. <?php
  2.  
  3. class mySoap extends SoapClient {
  4.    //miembro interno para contener el header obtenido
  5.    private $responseHeaders = array();
  6.    
  7.    function __doRequest($request, $location, $saction, $version) {
  8.     $doc = new DOMDocument('1.0');
  9.     $doc->loadXML($request);
  10.  
  11.     $objWSSE = new WSSESoap($doc);
  12.  
  13.     $objWSSE->addUserToken("YOUR_USERNAME_HERE", "YOUR_PASSWORD_HERE", TRUE);
  14.  
  15.     //lo que hacemos es modificar el llamado a __doRequest.
  16.     //return parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version);
  17.    
  18.     $response = parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version);
  19.     //Analizamos la respuesta para extraer el encabezado
  20.     $dom = new DOMDocument;
  21.     $dom->loadXML( $response, LIBXML_NOWARNING );
  22.     $path = new DOMXPath( $dom );
  23.     $path->registerNamespace( 'soap', 'http://schemas.xmlsoap.org/soap/envelope/');
  24.     $xml = $path->query('//soap:Header/*');
  25.     $this->responseHeaders=$this->headers2array($xml);
  26.  
  27.     return $response;
  28.    }
  29.    
  30.    //Anexamos un nuevo metodo para realizar una pequeña conversion
  31.    private function headers2array($response){
  32.         $headers=array();
  33.         foreach ($response as $node) {
  34.             if($node->hasChildNodes()){
  35.                 $headers[$node->nodeName]=$this->headers2array($node->childNodes);
  36.             }else{
  37.                 $headers[$node->nodeName]=$node->nodeValue;
  38.             }
  39.         }
  40.         return $headers;
  41.    }
  42.    //Solicitamos se nos entregue el headers extraido
  43.    public function getResponseHeaders(){
  44.         return $this->responseHeaders;
  45.    }  
  46. }

como puedes observar he adaptado un poco el metodo __doRequest para que intercepte y analice la respuesta obtenida y nos permita extraer las headers, posteriormente retorna la respuesta obtenida inicialmente.

como usarlo? desde el objeto cliente basta con que llame al metodo nuevo llamado getResponseHeaders().
Código PHP:
Ver original
  1. echo "=======Las Headers=======<br/>";
  2. print_r($sClient->getResponseHeaders());


si alguien sabe alguna otra forma de obtener las headers sin montar todo esto, seria bueno que nos lo hiciera saber, gracias.

Saludos.
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....