Anexo II En el presente anexo se incluye el código PHP de la web API almacenada en el servidor intermedio. En este caso, el orden de los archivos persigue favorecer la comprensión del código, por lo que no se ha realizado una ordenación alfabética de los mismos. Archivo servidor_intermedio5.php <?php //Incluimos la librería para parsear html include_once('simple_html_dom.php'); function loginintersas ($url, $agente) { foreach($_post as $nombre_campo => $valor){ $asignacion = "$". $nombre_campo. "='". $valor. "';"; eval($asignacion); //$ckfile = tempnam ("/tmp", "CURLCOOKIE"); $curl = curl_init(); //Nueva sesion CURL $campos = "id_us=". $id_us. "&dia=". $dia. "&mes=". $mes. "&anio=". $anio. "&dni=". $dni. "&origen=1"; curl_setopt ($curl, CURLOPT_URL, $url); //Direccion de destino curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); //Resultado en una cadena de texto curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl, CURLOPT_USERAGENT, $agente); curl_setopt ($curl, CURLOPT_HEADER, 1); //devuelve encabezado http // Especificamos la versión de SSL para poder conectar con el servidor de InterS@S curl_setopt ($curl, CURLOPT_SSLVERSION, 3); /* Se comprobará que el certificado del servidor es válido verificando que la CA (Autoridad Certificadora) que lo expidió está entre las CA reconocidas.*/ curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, true); /* También se comprobará que el common name (CN) del certificado de servidor se corresponde con el dominio al que nos estamos conectando.*/ curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 2); /* Con la siguiente opción le indicamos a curl que confíe en los certificados de servidor firmados por una CA cuyo certificado raiz es FNMTClase2CA-FNMT.crt. Este es el certificado raiz de la FNMT que es la autoridad certificadora que expide el certificado de servidor del servidor al que estamos intentando acceder vía https (el servidor de InterS@S). El certificado se ha obtenido exportándolo desde Firefox como certificado X.509 con cadena (PEM). Es fundamental que se exporte en este formato para que sea compatible con Curl. Por otra parte getcwd() es una función de php que devuelve el directorio actual.*/ curl_setopt ($curl, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl, CURLOPT_POST, 1); curl_setopt ($curl, CURLOPT_POSTFIELDS, $campos); $codigofuente = curl_exec ($curl); //Ejecutamos sesion CURL /* Comprobamos que los datos se han introducido correctamente (comprobamos que no hemos obtenido la página advirtiendo de la no coincidencia entre los datos introducidos y los almacenados en la base de datos de InterS@S). */ 136
$html->load($codigofuente); $compruebaerrordatos=$html->find('span[class=letra_general]',0)->innertext; if ($compruebaerrordatos=="se ha producido un error al introducir los datos."){ $json2='{"enlace_cancelar":"no hay cita que cancelar","comprueba_acceso":"'.$compruebaerrordatos.'"'; curl_close ($curl); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html para no malgastar memoria print (utf8_encode($json2)); print ('{"segundojson":"relleno"'); /* Queremos obtener la dirección para pedir cita con el médico, la cual es generada dinámicamente. Para ello analizaremos el contenido de $codigofuente, que no es más que una cadena de texto, haciendo uso de algunas funciones de php de manipulación de cadenas: */ $primerpaso=explode('href="/citainternet/inicio_citamedico.jsp?id=',$codigofuen te); $segundopaso=$primerpaso[1]; $tercerpaso=explode('" target="_blank" onclick="completa_url(this.href);',$segundopaso); $idprimero=$tercerpaso[0]; // La url para pedir cita $url2 = "https://ws003.juntadeandalucia.es/citainternet/inicio_citamedico.jsp?id=". $idprimero; curl_close ($curl); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html para ahorrar recursos del servidor. $curl2 = curl_init(); //Nueva sesion CURL curl_setopt ($curl2, CURLOPT_URL, $url2); //Direccion de destino curl_setopt($curl2, CURLOPT_AUTOREFERER, 1); // Queremos la respuesta en una cadena de texto curl_setopt ($curl2, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl2, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl2, CURLOPT_USERAGENT, $agente); /* Especificamos la versión de ssl para que funcione con el servidor de InterS@S */ curl_setopt ($curl2, CURLOPT_SSLVERSION, 3); /* Igual que antes, se comprobará que el certificado del servidor es válido comprobando que la CA (Autoridad Certificadora) que lo expidió está entre las CA reconocidas. */ curl_setopt ($curl2, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl2, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl2, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); /* Las siguientes tres líneas para almacenar las cookies de esta petición no funcionan en el hosting a pesar de haber dado permisos de escritura. $ckfile = "/proyecto/tmp".time(); curl_setopt($curl2, CURLOPT_COOKIEFILE, $ckfile); curl_setopt($curl2, CURLOPT_COOKIEJAR, $ckfile); 137
Finalmente opto por obtener las cookies parseando la cabecera http de la petición. Para que la cabecera http esté incluida en la respuesta que se obtiene establecemos a uno la opción CURLOPT_HEADER de la sesión curl */ //Se incluye la cabecera http en la respuesta. curl_setopt ($curl2, CURLOPT_HEADER, 1); //Ejecutamos sesion CURL esta vez sin paso de parámetros por POST $codigofuente2 = curl_exec ($curl2); /* Parseamos $códigofuente2 para quedarnos con las cookies que aparecen en la cabecera http (http response). La cabecera http que precede a la página solicitada incluye una serie de líneas que comienzan con la directiva Set-Cookie. A continuación aparece el name=value de la cookie que el servidor quiere que almacene el navegador. Tras un ; pueden aparecer una serie de atributos de la cookie. Lo que nos interesa a nosotros es este name=value que es lo que incluiremos (utilizando la opción CURL_COOKIE) en la cabecera de la siguiente petición que establezcamos. La cabecera http enviada por el servidor tiene la siguiente estructura: HTTP/1.1 200 OK Set-Cookie: name=value Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT Content-type: text/html (content of page) */ $start = strpos($codigofuente2, "Set-Cookie"); $end = strpos($codigofuente2, "Content-Type"); $parts = split("set-cookie: ",substr($codigofuente2, $start, $end-$start)); $cookies = array(); foreach ($parts as $co){ $cd = split(";",$co); if (!empty($cd[0])) /* cada vez que se recorre el bucle se añade un elemento a la matriz de tamaño indeterminado $cookies[] */ $cookies[] = $cd[0]; $cookies_sesion=implode(";",$cookies); curl_close ($curl2); //Cerramos sesion CURL $curl3 = curl_init(); //Nueva sesion CURL $url3='https://ws003.juntadeandalucia.es/citainternet/inicio_peticion_cita.jsp' ; curl_setopt ($curl3, CURLOPT_URL, $url3); //Direccion de destino /* Establecemos el valor de las cookies en la nueva petición. Las cookies las hemos obtenido parseando la cabecera http (http header de la enterior petición) */ curl_setopt($curl3, CURLOPT_COOKIE, $cookies_sesion); //Resultado en una cadena de texto curl_setopt ($curl3, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl3, CURLOPT_FOLLOWLOCATION, 0); 138
curl_setopt ($curl3, CURLOPT_USERAGENT, $agente); curl_setopt ($curl3, CURLOPT_HEADER, 0); //Oculta encabezado curl_setopt ($curl3, CURLOPT_SSLVERSION, 3); curl_setopt ($curl3, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl3, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl3, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl3, CURLOPT_POST, 0); //Ejecutamos sesion CURL $codigofuente3 = curl_exec ($curl3); /* Hay que obtener una matriz y después un JSON con los días de cita disponibles */ $html->load($codigofuente3); /*Comprobamos si hay cita pedida. Si la hay se genera un json con los datos de la cita.*/ $compruebacita=$html->find('a[class=enlace_cancelar_cita]',0)->href; if ($compruebacita!=null){ $matrizdatos['sesion']=$cookies_sesion; $matrizdatos['comprueba_acceso']="ok"; $matrizdatos['enlace_cancelar']=$html- >find('a[class=enlace_cancelar_cita]',0)->href; $matrizdatos['fecha_solicitud']=utf8_encode($html- >find('span[class=letra_pequena_fecha]',0)->innertext); $matrizdatos['fecha_cita']=utf8_encode($html- >find('strong[class=letra_justificante_cita_negrita_big]',0)->innertext); $matrizdatos['hora_cita']=utf8_encode($html- >find('strong[class=letra_justificante_cita_negrita_big]',1)->innertext); $matrizdatos['orden']=utf8_encode($html- >find('strong[class=letra_justificante_cita_negrita_big]',2)->innertext); $matrizdatos['centro']=utf8_encode($html- >find('td[class=letra_justificante_cita_negrita]',0)->innertext); $matrizdatos['direccion']=utf8_encode($html- >find('td[class=letra_justificante_cita_negrita]',2)->innertext); $matrizdatos['ubicacion']=trim(utf8_encode(html_entity_decode($html- >find('td[class=letra_justificante_cita_negrita]',3)->innertext))); $matrizdatos['profesional']=utf8_encode($html- >find('td[class=letra_justificante_cita_negrita]',4)->innertext); $matrizdatos['nombre_usuario']=trim(utf8_encode(html_entity_decode($html- >find('span[class=letra_justificante_cita_negrita]',0)->innertext))); $matrizdatos['fecha_solicitud']=trim(utf8_encode(html_entity_decode($html- >find('span[class=letra_justificante_cita]',4)->innertext))); curl_close ($curl3); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html para no malgastar memoria $json=json_encode($matrizdatos); print (utf8_encode($json)); print ('{"segundojson":"relleno"'); /* Si $compruebacita=null es que no hay cita asignada todavía */ for ( $i = 0 ; $i <= 13 ; $i ++) { $matrizdias['dia'.$i]['value']=$html->find('input[id=dia'.$i.']',0)- >value; 139
$matrizdias['dia'.$i]['cadena']=utf8_encode($html- >find('label[for=dia'.$i.']',0)->innertext); /* Array asociativo de datos. Como no hay cita asignada, al elemento "enlace_cancelar" le asignamos la cadena "no hay cita que cancelar". Este valor será el que utilice el widget para saber si debe ir a la vista MostrarDias o la la vista CitaAsignada: */ $matrizdatos['sesion']=$cookies_sesion; $matrizdatos['comprueba_acceso']="ok"; $matrizdatos['enlace_cancelar']="no hay cita que cancelar"; $matrizdatos['tipocita']=$html->find('input[name=tipocita]',0)->value; $matrizdatos['actividad_agenda']=$html- >find('input[name=actividad_agenda]',0)->value; $matrizdatos['modalidad_agenda']=$html- >find('input[name=modalidad_agenda]',0)->value; $matrizdatos['codigo_agenda']=$html->find('input[name=codigo_agenda]',0)- >value; $matrizdatos['codigo_profesional']=$html- >find('input[name=codigo_profesional]',0)->value; $matrizdatos['domicilio_usuario']=$html- >find('input[name=domicilio_usuario]',0)->value; $matrizdatos['nuss_usuario']=trim($html->find('input[name=nuss_usuario]',0)- >value); $matrizdatos['nombre_usuario']=trim($html- >find('input[name=nombre_usuario]',0)->value); $matrizdatos['telefonos_usuario']=$html- >find('input[name=telefonos_usuario]',0)->value; $matrizdatos['desplazado']=$html->find('input[name=desplazado]',0)->value; $matrizdatos['tarea_desc']=$html->find('input[name=tarea_desc]',0)->value; $matrizdatos['centro_desc']=$html->find('input[name=centro_desc]',0)->value; $matrizdatos['centro_codigo']=$html->find('input[name=centro_codigo]',0)- >value; $matrizdatos['nombre_profesional']=$html- >find('input[name=nombre_profesional]',0)->value; curl_close ($curl3); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html para no malgastar memoria $json2=json_encode($matrizdatos); print (utf8_encode($json2)); $json=json_encode($matrizdias); print (utf8_encode($json)); //Hacemos la llamada a la función loginintersas $codigofuente3 = loginintersas ('https://ws003.juntadeandalucia.es/pls/intersas/servicios.localizar_usuario', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-us; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');?> 140
Archivo seleccion_de_cita2.php <?php //Incluimos la librería para parsear html include_once('simple_html_dom.php'); function selecciondecita ($url, $agente) { foreach($_post as $nombre_campo => $valor){ $asignacion = "$". $nombre_campo. "='". $valor. "';"; eval($asignacion); $camposfijos = '&cookies_sesion='.$cookies_sesion.'&tipocita='.$tipocita.'&actividad_agenda='.$ac tividad_agenda.'&modalidad_agenda='.$modalidad_agenda.'&codigo_agenda='.$codigo_ag enda.'&codigo_profesional='.$codigo_profesional.'&domicilio_usuario='.$domicilio_u suario.'&nuss_usuario='.$nuss_usuario.'&nombre_usuario='.$nombre_usuario.'&telefon os_usuario='.$telefonos_usuario.'&desplazado='.$desplazado.'&tarea_desc='.$tarea_d esc.'¢ro_desc='.$centro_desc.'¢ro_codigo='.$centro_codigo.'&nombre_profesi onal='.$nombre_profesional; $campos = 'diacita='.$diacita0.$camposfijos; $curl0 = curl_init(); //Nueva sesion CURL curl_setopt ($curl0, CURLOPT_URL, $url); //Direccion de destino /* Establecemos el valor de las cookies en la nueva petición. Las cookies se han enviado desde el Widget de Cita Médica por POST. */ curl_setopt($curl0, CURLOPT_COOKIE, $cookies_sesion); // Para que el resultado de la petición se almacene en una cadena de texto: curl_setopt ($curl0, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl0, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl0, CURLOPT_USERAGENT, $agente); curl_setopt ($curl0, CURLOPT_HEADER, 0); //Oculta encabezado curl_setopt ($curl0, CURLOPT_SSLVERSION, 3); //Especificamos la versión de ssl /* Para que curl compruebe que el certificado del servidor es válido (que verifique que la CA o Autoridad Certificadora que lo expidió está entre las CA reconocidas) se asigna el valor true a la opción CURLOPT_SSL_VERIFYPEER. */ curl_setopt ($curl0, CURLOPT_SSL_VERIFYPEER, true); /* Comprueba que el common name (CN) del certificado de servidor se corresponde con el dominio al que nos estamos conectando. */ curl_setopt ($curl0, CURLOPT_SSL_VERIFYHOST, 2); /* Con la siguiente opción le indicamos a curl que confíe en los certificados de servidor firmados por una CA cuyo certificado raiz es FNMTClase2CA-FNMT.crt. Este es el certificado raiz de la FNMT que es la autoridad certificadora que expide el certificado de servidor del servidor al que estamos intentando acceder vía https (el servidor de InterS@S). El certificado se ha obtenido exportándolo desde Firefox como certificado X.509 con cadena (PEM). Es fundamental que se exporte en este formato para que sea compatible con Curl. Por otra parte getcwd() es una función de php que devuelve el directorio actual.*/ curl_setopt ($curl0, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl0, CURLOPT_POST, 1); curl_setopt ($curl0, CURLOPT_POSTFIELDS, $campos); //Ejecutamos sesion CURL $codigofuente0 = curl_exec ($curl0); 141
$html->load($codigofuente0); //$html = str_get_html($codigofuente0); $matrizhoras0['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras0['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos0['numerohoras']=$numerohoras; $matrizdatos0['codigo_agenda']=utf8_encode($html- $matrizdatos0['modalidad_agenda']=utf8_encode($html- $matrizdatos0['actividad_agenda']=utf8_encode($html- $matrizdatos0['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos0['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos0['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos0); $json2=json_encode($matrizhoras0); curl_close ($curl0); //Cerramos sesion CURL $html->clear(); $curl1 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita1.$camposfijos; curl_setopt ($curl1, CURLOPT_URL, $url); curl_setopt($curl1, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl1, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl1, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl1, CURLOPT_USERAGENT, $agente); curl_setopt ($curl1, CURLOPT_HEADER, 0); curl_setopt ($curl1, CURLOPT_SSLVERSION, 3); curl_setopt ($curl1, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl1, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl1, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl1, CURLOPT_POST, 1); 142
curl_setopt ($curl1, CURLOPT_POSTFIELDS, $campos); //Ejecutamos sesion CURL $codigofuente1 = curl_exec ($curl1); $html->load($codigofuente1); $matrizhoras1['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras1['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos1['numerohoras']=$numerohoras; $matrizdatos1['codigo_agenda']=utf8_encode($html- $matrizdatos1['modalidad_agenda']=utf8_encode($html- $matrizdatos1['actividad_agenda']=utf8_encode($html- $matrizdatos1['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos1['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos1['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos1); $json2=json_encode($matrizhoras1); curl_close ($curl1); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html para evitar falta de memoria $curl2 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita2.$camposfijos; curl_setopt ($curl2, CURLOPT_URL, $url); curl_setopt($curl2, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl2, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl2, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl2, CURLOPT_USERAGENT, $agente); curl_setopt ($curl2, CURLOPT_HEADER, 0); curl_setopt ($curl2, CURLOPT_SSLVERSION, 3); curl_setopt ($curl2, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl2, CURLOPT_SSL_VERIFYHOST, 2); 143
curl_setopt ($curl2, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl2, CURLOPT_POST, 1); curl_setopt ($curl2, CURLOPT_POSTFIELDS, $campos); $codigofuente2 = curl_exec ($curl2); //Ejecutamos sesion CURL $html->load($codigofuente2); $matrizhoras2['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras2['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos2['numerohoras']=$numerohoras; $matrizdatos2['codigo_agenda']=utf8_encode($html- $matrizdatos2['modalidad_agenda']=utf8_encode($html- $matrizdatos2['actividad_agenda']=utf8_encode($html- $matrizdatos2['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos2['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos2['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos2); $json2=json_encode($matrizhoras2); curl_close ($curl2); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl3 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita3.$camposfijos; curl_setopt ($curl3, CURLOPT_URL, $url); curl_setopt($curl3, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl3, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl3, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl3, CURLOPT_USERAGENT, $agente); curl_setopt ($curl3, CURLOPT_HEADER, 0); curl_setopt ($curl3, CURLOPT_SSLVERSION, 3); curl_setopt ($curl3, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl3, CURLOPT_SSL_VERIFYHOST, 2); 144
curl_setopt ($curl3, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl3, CURLOPT_POST, 1); curl_setopt ($curl3, CURLOPT_POSTFIELDS, $campos); $codigofuente3 = curl_exec ($curl3); //Ejecutamos sesion CURL $html->load($codigofuente3); $matrizhoras3['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras3['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos3['numerohoras']=$numerohoras; $matrizdatos3['codigo_agenda']=utf8_encode($html- $matrizdatos3['modalidad_agenda']=utf8_encode($html- $matrizdatos3['actividad_agenda']=utf8_encode($html- $matrizdatos3['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos3['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos3['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos3); $json2=json_encode($matrizhoras3); curl_close ($curl3); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl4 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita4.$camposfijos; curl_setopt ($curl4, CURLOPT_URL, $url); curl_setopt($curl4, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl4, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl4, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl4, CURLOPT_USERAGENT, $agente); curl_setopt ($curl4, CURLOPT_HEADER, 0); curl_setopt ($curl4, CURLOPT_SSLVERSION, 3); curl_setopt ($curl4, CURLOPT_SSL_VERIFYPEER, true); 145
curl_setopt ($curl4, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl4, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl4, CURLOPT_POST, 1); curl_setopt ($curl4, CURLOPT_POSTFIELDS, $campos); $codigofuente4 = curl_exec ($curl4); //Ejecutamos sesion CURL $html->load($codigofuente4); $matrizhoras4['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras4['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos4['numerohoras']=$numerohoras; $matrizdatos4['codigo_agenda']=utf8_encode($html- $matrizdatos4['modalidad_agenda']=utf8_encode($html- $matrizdatos4['actividad_agenda']=utf8_encode($html- $matrizdatos4['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos4['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos4['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos4); $json2=json_encode($matrizhoras4); curl_close ($curl4); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl5 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita5.$camposfijos; curl_setopt ($curl5, CURLOPT_URL, $url); //Direccion de destino curl_setopt($curl5, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl5, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl5, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl5, CURLOPT_USERAGENT, $agente); curl_setopt ($curl5, CURLOPT_HEADER, 0); curl_setopt ($curl5, CURLOPT_SSLVERSION, 3); curl_setopt ($curl5, CURLOPT_SSL_VERIFYPEER, true); 146
curl_setopt ($curl5, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl5, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl5, CURLOPT_POST, 1); curl_setopt ($curl5, CURLOPT_POSTFIELDS, $campos); $codigofuente5 = curl_exec ($curl5); //Ejecutamos sesion CURL $html->load($codigofuente5); $matrizhoras5['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras5['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos5['numerohoras']=$numerohoras; $matrizdatos5['codigo_agenda']=utf8_encode($html- $matrizdatos5['modalidad_agenda']=utf8_encode($html- $matrizdatos5['actividad_agenda']=utf8_encode($html- $matrizdatos5['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos5['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos5['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos5); $json2=json_encode($matrizhoras5); curl_close ($curl5); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl6 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita6.$camposfijos; curl_setopt ($curl6, CURLOPT_URL, $url); curl_setopt($curl6, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl6, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl6, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl6, CURLOPT_USERAGENT, $agente); curl_setopt ($curl6, CURLOPT_HEADER, 0); curl_setopt ($curl6, CURLOPT_SSLVERSION, 3); curl_setopt ($curl6, CURLOPT_SSL_VERIFYPEER, true); 147
curl_setopt ($curl6, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl6, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl6, CURLOPT_POST, 1); curl_setopt ($curl6, CURLOPT_POSTFIELDS, $campos); $codigofuente6 = curl_exec ($curl6); //Ejecutamos sesion CURL $html->load($codigofuente6); $matrizhoras6['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras6['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos6['numerohoras']=$numerohoras; $matrizdatos6['codigo_agenda']=utf8_encode($html- $matrizdatos6['modalidad_agenda']=utf8_encode($html- $matrizdatos6['actividad_agenda']=utf8_encode($html- $matrizdatos6['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos6['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos6['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos6); $json2=json_encode($matrizhoras6); curl_close ($curl6); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl7 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita7.$camposfijos; curl_setopt ($curl7, CURLOPT_URL, $url); curl_setopt($curl7, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl7, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl7, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl7, CURLOPT_USERAGENT, $agente); curl_setopt ($curl7, CURLOPT_HEADER, 0); curl_setopt ($curl7, CURLOPT_SSLVERSION, 3); 148
curl_setopt ($curl7, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl7, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl7, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl7, CURLOPT_POST, 1); curl_setopt ($curl7, CURLOPT_POSTFIELDS, $campos); $codigofuente7 = curl_exec ($curl7); //Ejecutamos sesion CURL $html->load($codigofuente7); $matrizhoras7['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras7['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos7['numerohoras']=$numerohoras; $matrizdatos7['codigo_agenda']=utf8_encode($html- $matrizdatos7['modalidad_agenda']=utf8_encode($html- $matrizdatos7['actividad_agenda']=utf8_encode($html- $matrizdatos7['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos7['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos7['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos7); $json2=json_encode($matrizhoras7); curl_close ($curl7); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl8 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita8.$camposfijos; curl_setopt ($curl8, CURLOPT_URL, $url); curl_setopt($curl8, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl8, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl8, CURLOPT_FOLLOWLOCATION, 0); 149
curl_setopt ($curl8, CURLOPT_USERAGENT, $agente); curl_setopt ($curl8, CURLOPT_HEADER, 0); curl_setopt ($curl8, CURLOPT_SSLVERSION, 3); curl_setopt ($curl8, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl8, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl8, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl8, CURLOPT_POST, 1); curl_setopt ($curl8, CURLOPT_POSTFIELDS, $campos); $codigofuente8 = curl_exec ($curl8); //Ejecutamos sesion CURL $html->load($codigofuente8); $matrizhoras8['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras8['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos8['numerohoras']=$numerohoras; $matrizdatos8['codigo_agenda']=utf8_encode($html- $matrizdatos8['modalidad_agenda']=utf8_encode($html- $matrizdatos8['actividad_agenda']=utf8_encode($html- $matrizdatos8['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos8['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos8['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos8); $json2=json_encode($matrizhoras8); curl_close ($curl8); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl9 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita9.$camposfijos; curl_setopt ($curl9, CURLOPT_URL, $url); curl_setopt($curl9, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl9, CURLOPT_RETURNTRANSFER, 1); 150
curl_setopt ($curl9, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl9, CURLOPT_USERAGENT, $agente); curl_setopt ($curl9, CURLOPT_HEADER, 0); curl_setopt ($curl9, CURLOPT_SSLVERSION, 3); curl_setopt ($curl9, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl9, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl9, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl9, CURLOPT_POST, 1); curl_setopt ($curl9, CURLOPT_POSTFIELDS, $campos); $codigofuente9 = curl_exec ($curl9); //Ejecutamos sesion CURL $html->load($codigofuente9); $matrizhoras9['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras9['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos9['numerohoras']=$numerohoras; $matrizdatos9['codigo_agenda']=utf8_encode($html- $matrizdatos9['modalidad_agenda']=utf8_encode($html- $matrizdatos9['actividad_agenda']=utf8_encode($html- $matrizdatos9['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos9['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos9['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos9); $json2=json_encode($matrizhoras9); curl_close ($curl9); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl10 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita10.$camposfijos; curl_setopt ($curl10, CURLOPT_URL, $url); curl_setopt($curl10, CURLOPT_COOKIE, $cookies_sesion); 151
curl_setopt ($curl10, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl10, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl10, CURLOPT_USERAGENT, $agente); curl_setopt ($curl10, CURLOPT_HEADER, 0); curl_setopt ($curl10, CURLOPT_SSLVERSION, 3); curl_setopt ($curl10, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl10, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl10, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl10, CURLOPT_POST, 1); curl_setopt ($curl10, CURLOPT_POSTFIELDS, $campos); $codigofuente10 = curl_exec ($curl10); //Ejecutamos sesion CURL $html->load($codigofuente10); $matrizhoras10['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras10['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos10['numerohoras']=$numerohoras; $matrizdatos10['codigo_agenda']=utf8_encode($html- $matrizdatos10['modalidad_agenda']=utf8_encode($html- $matrizdatos10['actividad_agenda']=utf8_encode($html- $matrizdatos10['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos10['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos10['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos10); $json2=json_encode($matrizhoras10); curl_close ($curl10); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl11 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita11.$camposfijos; 152
curl_setopt ($curl11, CURLOPT_URL, $url); curl_setopt($curl11, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl11, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl11, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl11, CURLOPT_USERAGENT, $agente); curl_setopt ($curl11, CURLOPT_HEADER, 0); curl_setopt ($curl11, CURLOPT_SSLVERSION, 3); curl_setopt ($curl11, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl11, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl11, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl11, CURLOPT_POST, 1); curl_setopt ($curl11, CURLOPT_POSTFIELDS, $campos); $codigofuente11 = curl_exec ($curl11); //Ejecutamos sesion CURL $html->load($codigofuente11); $matrizhoras11['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras11['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos11['numerohoras']=$numerohoras; $matrizdatos11['codigo_agenda']=utf8_encode($html- $matrizdatos11['modalidad_agenda']=utf8_encode($html- $matrizdatos11['actividad_agenda']=utf8_encode($html- $matrizdatos11['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos11['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos11['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos11); $json2=json_encode($matrizhoras11); curl_close ($curl11); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html $curl12 = curl_init(); //Nueva sesion CURL 153
$campos = 'diacita='.$diacita12.$camposfijos; curl_setopt ($curl12, CURLOPT_URL, $url); curl_setopt($curl12, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl12, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl12, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl12, CURLOPT_USERAGENT, $agente); curl_setopt ($curl12, CURLOPT_HEADER, 0); curl_setopt ($curl12, CURLOPT_SSLVERSION, 3); curl_setopt ($curl12, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl12, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl12, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl12, CURLOPT_POST, 1); curl_setopt ($curl12, CURLOPT_POSTFIELDS, $campos); $codigofuente12 = curl_exec ($curl12); //Ejecutamos sesion CURL $html->load($codigofuente12); $matrizhoras12['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras12['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos12['numerohoras']=$numerohoras; $matrizdatos12['codigo_agenda']=utf8_encode($html- $matrizdatos12['modalidad_agenda']=utf8_encode($html- $matrizdatos12['actividad_agenda']=utf8_encode($html- $matrizdatos12['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos12['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos12['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos12); $json2=json_encode($matrizhoras12); curl_close ($curl12); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html 154
$curl13 = curl_init(); //Nueva sesion CURL $campos = 'diacita='.$diacita13.$camposfijos; curl_setopt ($curl13, CURLOPT_URL, $url); curl_setopt($curl13, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl13, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl13, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($curl13, CURLOPT_USERAGENT, $agente); curl_setopt ($curl13, CURLOPT_HEADER, 0); curl_setopt ($curl13, CURLOPT_SSLVERSION, 3); curl_setopt ($curl13, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl13, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($curl13, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl13, CURLOPT_POST, 1); curl_setopt ($curl13, CURLOPT_POSTFIELDS, $campos); $codigofuente13 = curl_exec ($curl13); //Ejecutamos sesion CURL $html->load($codigofuente13); $matrizhoras13['hora'.$numerohoras]['value']=utf8_encode($html- $matrizhoras13['hora'.$numerohoras]['cadena']=utf8_encode($html- $matrizdatos13['numerohoras']=$numerohoras; $matrizdatos13['codigo_agenda']=utf8_encode($html- $matrizdatos13['modalidad_agenda']=utf8_encode($html- $matrizdatos13['actividad_agenda']=utf8_encode($html- $matrizdatos13['centro_ubicacion_agenda']=utf8_encode($html- $matrizdatos13['codigo_tarea_agenda']=utf8_encode($html- $matrizdatos13['profesional_agenda']=utf8_encode($html- $json=json_encode($matrizdatos13); $json2=json_encode($matrizhoras13); curl_close ($curl13); //Cerramos sesion CURL $html->clear();//eliminamos el objeto html 155
//Hacemos la llamada a la función selecciondecita() $codigofuente4 = selecciondecita ('https://ws003.juntadeandalucia.es/citainternet/seleccion_de_cita.jsp', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-us; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');?> 156
Archivo cita_asignada.php <?php //Incluimos la librería para parsear html include_once('simple_html_dom.php'); function citaasignada ($url, $agente) { foreach($_post as $nombre_campo => $valor){ $asignacion = "$". $nombre_campo. "='". $valor. "';"; eval($asignacion); $curl5 = curl_init(); //Nueva sesion CURL $campos = 'horacita='.$horacita.'&cookies_sesion='.$cookies_sesion.'&codigo_agenda='.$codigo _agenda.'&actividad_agenda='.$actividad_agenda.'&modalidad_agenda='.$modalidad_age nda.'¢ro_ubicacion_agenda='.$centro_ubicacion_agenda.'&codigo_tarea_agenda='.$ codigo_tarea_agenda.'&profesional_agenda='.$profesional_agenda.'&nombre_usuario='. $nombre_usuario.'&domicilio_usuario='.$domicilio_usuario.'&telefonos_usuario='.$te lefonos_usuario.'&nuss_usuario='.$nuss_usuario; curl_setopt ($curl5, CURLOPT_URL, $url); //Direccion de destino //Establecemos el valor de las cookies en la nueva petición. curl_setopt($curl5, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl5, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl5, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($curl5, CURLOPT_USERAGENT, $agente); curl_setopt ($curl5, CURLOPT_HEADER, 1); //Se incluye el encabezado en la salida curl_setopt ($curl5, CURLOPT_SSLVERSION, 3); /* Para que se compruebe que el certificado del servidor es válido verificando que la CA (Autoridad Certificadora) que lo expidió está entre las CA reconocidas ponemos la opción CURLOPT_SSL_VERIFYPEER a true. */ curl_setopt ($curl5, CURLOPT_SSL_VERIFYPEER, true); curl_setopt ($curl5, CURLOPT_SSL_VERIFYHOST, 2); // Para que la FNMT sea reconocida como autoridad certificadora: curl_setopt ($curl5, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl5, CURLOPT_POST, 1); curl_setopt ($curl5, CURLOPT_POSTFIELDS, $campos); $codigofuente5 = curl_exec ($curl5); //Ejecutamos sesion CURL $html->load($codigofuente5); /* Comprobamos que la sesión no ha caducado. Si hubiese caducado lo que obtenemos, en lugar de los datos de la cita, es un mensaje de sesión caducada: */ $comprueba_sesion=trim($html->find('span[class=letra_contenido_info]',0)- >innertext); if ($comprueba_sesion=="en estos momentos no podemos ofrecerle este servicio a través de Inters@s." $comprueba_sesion=="su tiempo de sesión ha caducado. Por favor, identifíquese de nuevo en InterS@S."){ $json2='{"comprueba_sesion":"'.$comprueba_sesion.'"'; print (utf8_encode($json2)); 157
/* Hay que obtener una matriz y después un JSON con los datos que se mostrarán en la vista correspondiente (los datos de la cita). */ $matrizdatos['comprueba_sesion']="ok"; $matrizdatos['enlace_cancelar']=utf8_encode($html- >find('a[class=enlace_cancelar_cita]',0)->href); $matrizdatos['fecha_solicitud']=utf8_encode($html- >find('span[class=letra_pequena_fecha]',0)->innertext); $matrizdatos['fecha_cita']=utf8_encode($html- >find('strong[class=letra_justificante_cita_negrita_big]',0)->innertext); $matrizdatos['hora_cita']=utf8_encode($html- >find('strong[class=letra_justificante_cita_negrita_big]',1)->innertext); $matrizdatos['orden']=utf8_encode($html- >find('strong[class=letra_justificante_cita_negrita_big]',2)->innertext); $matrizdatos['centro']=utf8_encode($html- >find('td[class=letra_justificante_cita_negrita]',0)->innertext); $matrizdatos['direccion']=utf8_encode($html- >find('td[class=letra_justificante_cita_negrita]',2)->innertext); $matrizdatos['ubicacion']=utf8_encode(trim(html_entity_decode($html- >find('td[class=letra_justificante_cita_negrita]',3)->innertext))); $matrizdatos['profesional']=utf8_encode($html- >find('td[class=letra_justificante_cita_negrita]',4)->innertext); $matrizdatos['nombre_usuario']=trim(utf8_encode(html_entity_decode($html- >find('span[class=letra_justificante_cita_negrita]',0)->innertext))); $matrizdatos['fecha_solicitud']=trim(utf8_encode(html_entity_decode($html- >find('span[class=letra_justificante_cita]',4)->innertext))); $json=json_encode($matrizdatos); curl_close ($curl5); //Cerramos sesion CURL $html->clear(); //Hacemos la llamada a la función selecciondecita() $codigofuente5 = citaasignada ('https://ws003.juntadeandalucia.es/citainternet/cita_asignada.jsp', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-us; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');?> 158
Archivo cancelacion_de_cita.php <?php //Incluimos la librería para parsear html include_once('simple_html_dom.php'); function cancelaciondecita ($url, $agente) { foreach($_post as $nombre_campo => $valor){ $asignacion = "$". $nombre_campo. "='". $valor. "';"; eval($asignacion); /********************************************************************************/ $curl0 = curl_init(); //Nueva sesion CURL $enlace_cancelar_completo="https://ws003.juntadeandalucia.es/citainternet/".$enlac e_cancelar0."&hora_inicio=".urlencode($hora_inicio)."&fecha=".urlencode($fecha)."& nombre_usuario=".urlencode($nombre_usuario); curl_setopt ($curl0, CURLOPT_URL, $enlace_cancelar_completo); /* Establecemos el valor de las cookies en la nueva petición. Las cookies se han pasado por POST desde el widget con el nombre cookies_sesion y en el bucle for del inicio de la función se han guardado en la variable $cookies_sesion. */ curl_setopt($curl0, CURLOPT_COOKIE, $cookies_sesion); curl_setopt ($curl0, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl0, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($curl0, CURLOPT_USERAGENT, $agente); curl_setopt ($curl0, CURLOPT_HEADER, 0); //Oculta encabezado // Se especifica la versión de SSL del servidor de InterS@S: curl_setopt ($curl0, CURLOPT_SSLVERSION, 3); /* Con la siguiente opción se exige la comprobación del certificado del servidor para lo cual se verificará que la CA (Autoridad Certificadora) que lo expidió está entre las CA reconocidas. */ curl_setopt ($curl0, CURLOPT_SSL_VERIFYPEER, true); /* Se comprueba que el common name (CN) del certificado de servidor se corresponde con el dominio al que nos estamos conectando. */ curl_setopt ($curl0, CURLOPT_SSL_VERIFYHOST, 2); /* En esta opción de curl se especifica el certificado raiz de la FNMT (CA que expide el certificado del servidor al que estamos intentando acceder vía https). Con esto le decimos a curl que es una CA reconocida. El certificado se obtiene de exportándolo desde Firefox como certificado X.509 con cadena (PEM). Es fundamental que esté en este formato para que sea compatible con Curl. Por otra parte getcwd() es una función de php que obtiene el directorio actual. */ curl_setopt ($curl0, CURLOPT_CAINFO, getcwd().'/fnmtclase2ca-fnmt.crt'); curl_setopt ($curl0, CURLOPT_POST, 0); //curl_setopt ($curl0, CURLOPT_POSTFIELDS, $campos); $codigofuente0 = curl_exec ($curl0); //Ejecutamos sesion CURL curl_close ($curl0); //Cerramos sesion CURL $html->load($codigofuente0); /* trim() elimina los espacios del inicio y del final de la cadena, utf8_encode() pasa la codificación de ISO-8859-1 a utf8, html_entity_decode() convierte las entidades html que haya en la cadena (como í) a su correspondiente carácter (í en este caso): */ 159
$matriz['informacion']=trim(utf8_encode(html_entity_decode($html- >find('span[class=letra_contenido_info]',0)->innertext))); /* Con la función json_encode() de PHP obtenermos una cadena en formato json a partir de la matriz asociativa $matriz */ $json=json_encode($matriz); $html->clear(); //Hacemos la llamada a la función selecciondecita() $codigofuente4 = cancelaciondecita ('https://ws003.juntadeandalucia.es/citainternet/seleccion_de_cita.jsp', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-us; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');?> 160