Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/05/2010, 04:28
Asgaard
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 1
PhP, Sockets y XML

Saludos,

primer mensaje en el foro y ya con dudas, en fin...

La cosa es que intento conectarme a un servicio externo a mi servidor, mediante SSL, la conexión tiene que mantenerse abierta y por allí transmitir comandos. Los comandos, son XML que luego trataremos y demás.

El primer comando en enviarse es <hello>, si la conexión está abierta, nos devuelve un <greetings>, hasta aquí no hay problema.

El segundo comando en enviarse es un <login>, no sé si funciona o no, porque al leer la respuesta, el puntero del buffer está apuntando a la última posición (la de la lectura del <hello>, un EOF) por lo que no lee nada y me devuelve cadena vacia.

He intentado hacer un rewind() pero me dice que no es posible.

A alguien se le ocurre alguna idea? Os pongo por aquí el código que estoy usando a ver si le veis alguna utilidad...

Código PHP:
public function doTransaction(){
            
    echo "Conexion SSL\n";

    /* Obtener el puerto para el servicio WWW. */
    $port = "33128";

    /* Obtener la direccion IP del host de destino. */
    $host = "195.234.53.108";
            
    /* Obtenidos del archivo de configuracion */
    //$host = gethostbyaddr(__EURID_HOST__);
    //$port = __EURID_PORT__;
             
    $errno = 440;
    $errstr = " No encontrado.";

    /* compose XML request */ 
    $entrada = "<?xml version="1.0\" encoding=\"iso-8859-1\"?>".
        
"<epp xmlns=\"http://www.eurid.eu/xml/epp/epp-1.0\xmlns:".
                                
"xsi=\\\"http://www.w3.org/2001/XMLSchema-instance".
        
"xsi:schemaLocation=\"http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd\">".
        
"<hello/>".
        
"</epp>";

    echo 
"Generados ".strlen($entrada)." bytes...\n\n";
    echo 
$entrada."\n\n";
            
    if (
strlen($entrada)/1000 1)        {    $entrada strlen($entrada).$entrada;        }
    else if (
strlen($entrada)/100 1)    {    $entrada "0".strlen($entrada).$entrada;    }
    else if (
strlen($entrada)/10 1)    {    $entrada "00".strlen($entrada).$entrada;    }
    else                 {    
$entrada "000".strlen($entrada).$entrada; }
                        
    
/* ABRIENDO CONEXION */
    
$fp pfsockopen("ssl://".$host$port$errno$errstr); 
    if (!
$fp) { 
           echo 
"$errstr ($errno)<br/>\n"
        echo 
$fp
        exit();
    } 
            
    echo 
"Enviando petici&oacute;n XML HEAD...".strlen($entrada)." bytes..."
    
fputs($fp$entrada); 
            
                echo 
"Leyendo respuesta:\n\n";
        
$salida '';
                while (!
feof($fp)) { 
                
$salida .= fgets($fp128); 
                   }
                echo 
"Posicion del puntero de lectura: ".ftell($fp)."\n\n";
            
                echo (
"<pre>");
     
var_dump($salida);
     echo (
"</pre>");
            
                   
/* COMENZAMOS CON EL LOGIN */
            
                  
$entrada "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>".
        
"<epp xmlns=\"http://www.eurid.eu/xml/epp/epp-1.0\"".
                       
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"".
        
"xsi:schemaLocation=\"http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd\">".
        
"<command>".
        
"<login>".
        
"<clID>".__EURID_ID__."</clID>".
        
"<pw>".__EURID_PASSWORD__."</pw>".
        
"<options>".
        
"<version>1.0</version>".
        
"<lang>en</lang>".
        
"</options>".
        
"<svcs>".
        
"<objURI>http://www.eurid.eu/xml/epp/contact-1.0</objURI>".
        
"<svcExtension>".
        
"<extURI>http://www.eurid.eu/xml/epp/build/20051012</extURI>".
        
"</svcExtension>".
        
"</svcs>".
        
"</login>".
        
"</command>".
        
"</epp>";
                   echo 
"Generados ".strlen($entrada)." bytes...\n\n";
    echo 
$entrada."\n\n";
            
    if (
strlen($entrada)/1000 1)        {    $entrada strlen($entrada).$entrada;        }
    else if (
strlen($entrada)/100 1)    {    $entrada "0".strlen($entrada).$entrada;    }
    else if (
strlen($entrada)/10 1)    {    $entrada "00".strlen($entrada).$entrada;    }
    else                {    
$entrada "000".strlen($entrada).$entrada; }
            
    echo 
"Enviando petici&oacute;n XML HEAD...".strlen($entrada)." bytes..."
        
fputs($fp$entrada); 
         
    echo 
"Posicion del puntero de lectura: ".ftell($fp)."\n\n";
    echo 
"Leyendo respuesta:\n\n";
        
$salida '';
        while (!
feof($fp)) { 
        
$salida .= fgets($fp128); 
        }
    echo 
"Posicion del puntero de lectura: ".ftell($fp)."\n\n";
        
    echo (
"\n\n");
    
var_dump($salida);
    echo (
"\n\n");
            
    echo 
"\n\nCerrando socket...";
    
fclose($fp); 
    echo 
"OK.\n\n";
                
    
$response strstr($salida'<?xml');
    return 
$response;
}

Última edición por Asgaard; 14/05/2010 a las 05:27