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ón XML HEAD...".strlen($entrada)." bytes...";
fputs($fp, $entrada);
echo "Leyendo respuesta:\n\n";
$salida = '';
while (!feof($fp)) {
$salida .= fgets($fp, 128);
}
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ó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($fp, 128);
}
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;
}