ANEXO II: ARCHIVOS CREADOS PARA IMPLEMENTAR LA WEB API EN EL SERVIDOR

Documentos relacionados
Pasarela para envíos de faxes a través de interfaz HTTPS

Integración HTTP REST. Versión 2.0

Integración REST Text2Speech

PUSH WEB SERVER HTTP GATEWAY. Versión 1.0

Pasarela para envíos de faxes a través de interfaz HTTPS

factesol Documentation

TELKIA. Especificación, SMSBROKER HTTP Protocol TELKIA. Versión: 2.5 Fecha: Page 1

REA Registro de Empresas Acreditadas. Guía de configuración previa

Servicios en Red. UT6. Servicio HTTP

Guia práctica de PHP 5 Francisco Charte Ojeda

TEMA 4: SERVICIOS HTTP

Objeto petición. Introducción. Mensajes de petición. Copyright 2016 Node Academy. Reservados todos los derechos. Objeto petición 1

HEADERS CABECERAS HTPP. QUÉ SON Y PARA QUÉ SIRVEN. REQUEST Y STATUS LINE. REFERER, AUTHORIZATION, USER- AGENT (CU01208F)

De esta manera, cuando el usuario rellena un campo cómo el siguiente... <input type="text" name="telefono"> </form>

Programación páginas web con PHP

Documentación de la API clickline.com

Documentación de integración y recomendaciones

Procesamiento y. Validación de Formularios. en PHP

Procesamiento y Validación de formularios en PHP

hipervinculos La página que rescata el valor pasado como parámetro es la siguiente: <html> <head> <title>problema</title> </head> <body> <?

MT - HTML API Interface

Documentación de integración y recomendaciones

Punto 3 Protocolo HTTP. Juan Luis Cano

ERASMUS Manual de Firma del Convenio Financiero

PHP 7 Desarrollar un sitio web dinámico e interactivo

INSTRUCCIONES PARA LA FIRMA ELECTRÓNICA. Pre requisitos para firmar electrónicamente:

Desarrollo y servicios web

Unidad Didáctica 2 GENERACIÓN DE DOCUMENTOS WEB CON GUIONES DE SERVIDOR

Servidor Web IIS en Windows Server 2016

Requisitos Técnicos y de Configuración Sistema de Notificación Electrónica

Manual de configuración navegador Mozilla Firefox

buscador diacronico Documentation

Desarrollo PHP con Webmatrix

Requisitos Técnicos y de Configuración Sistema de Notificación Electrónica

Funciones de PHP. Contenido

Localizar direcciones en Google Maps con PHP

PROGRAMACIÓN EN PHP. 1. Identificar las características y modalidad de programación bajo PHP.

Aplicaciones Web. Aplicaciones Distribuidas

OneAPI Interface Ref Push SMS. 13 de mayo de 2016 v1.1

Instalación y verificación de la Tarjeta Criptográfica

CONFIGURACIÓN DE FIRMA ELECTRÓNICA

INSTALACIÓN Y VERIFICACIÓN DE LA TARJETA CRIPTOGRÁFICA

Recomendaciones relativas al uso de AUTOFIRMA.

Explotación del Componente Cliente

Recomendaciones relativas al uso

PRÁCTICA 6. Windows Server 2008-R2 RECURSOS COMPARTIDOS ASIGNACIÓN DE DERECHOS

Requisitos técnicos para firmar con applets Java

Requisitos técnicos para firmar con AutoFirma

Sede electrónica. Requisitos de configuración del Applet de Firma

Firma de Aceptación / Renuncia de Plaza Erasmus

Instalación Componente Cliente

Arquitectura de Redes 1: Práctica 1. Javier Ramos José Luis García Dorado Germán Retamosa

Instalación de certificados SSL en navegadores del Usuario

Redes de área local: Aplicaciones y servicios WINDOWS

PHP y MySQL Domine el desarrollo de un sitio Web dinámico e interactivo (3ª edición)

SGR - CCS. Reconocimiento de la Autoridad de Certificación de TIREA (TIREA CA)

DELTA. Guía de Configuración Previa

XMLHTTPREQUEST AJAX: MÉTODOS OPEN, SEND, GETRESPONSEHEADER, SETREQUESTHEADER (CU01209F)

Slack, WordPress y un poco más. Eric Zeidan

API NewsletterSoft. IE-API Herramienta de Newsletter Página 1 de 14

Presentación de Solicitudes con Firma Electrónica en Mozilla Firefox

REA Registro de Empresas Acreditadas Guía de configuración previa

PROGRAMACIÓN PÁGINAS WEB JAVASCRIPT Y PHP

Preguntas frecuentes KWB Comfort Online Contenido

DAWeb práctica 11, día dos de mayo de 2018

Web Service: Consulta de Arribo de Ómnibus Manual de referencia

Portal de disposición del certificado de la configuración ISE 2.0

Guía del Curso Certificación Profesional TIC en Programación de Páginas Web con PHP y Javascript

Instrucciones para la instalación de WebSigner en Mozilla Firefox

Solicitud de Certificados de servidor web

Requisitos técnicos para firmar con AutoFirma

COMUNICACIÓN ENTRE EL CLIENTE Y SERVIDOR SIN PHP Y CON PHP. INTÉRPRETE PHP Y GESTOR DE BASES DE DATOS (CU00804B)

Curso de Programación en PHP Nivel I

Sesiones en PHP. Área de Ingeniería Telemática

SOLICITUD ELECTRÓNICA DE AYUDAS

una nueva página (recordar que en este curso no se ve como programar en el servidor) Todo los formularios que implemento y los que usted implementará

Título. Problemas con apertura de aplicaciones Api0.ucam.edu Error SSL 61 / error certificado. Versión 1.2. Departamento de Ingeniería de Sistemas

ITACA La aplicación de Gestión de Identidad

Firma Electrónica de Doumentos con AutoFirma

Guía práctica PHP 6. (c) Francisco Charte Ojeda

Implementación del servicio de envío masivo de mensajes SMS HTTP/s API -

Unidad Didáctica 2 Programación de documentos web utilizando lenguajes de script de servidor

REA Registro de Empresas Acreditadas en el Sector de la Construcción Guía de configuración previa

Manual Configuración equipos para Firma Electrónica IGAPE

Cisco recomienda que usted tiene conocimiento del proceso firmada y del certificado autofirmado.

índice 1.- INTRODUCCIÓN 2.- JAVASCRIPT 3.- FLASH 4.- CRIPTOGRAFÍA

Funciones de PHP. Francisco José Naranjo Abad

INSTALACIÓN Y VERIFICACIÓN DE LA TARJETA CRIPTOGRÁFICA

INTRODUCCIÓN A PHP PHP: LENGUAJE DE PROGRAMACIÓN

OBTENCIÓN DEL CERTIFICADO

Transcripción:

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.'&centro_desc='.$centro_desc.'&centro_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.'&centro_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