Los rincones del API Win32: El caché de WinInet - Uso transparente del caché con WinInet

4 - Uso transparente del caché con WinInet

[editar]
Tutorial creado por Juan Manuel. Extraido de: http://www.lawebdejm.com
30 de Noviembre de 1999
Como acabamos de decir, el caché de Internet Explorer puede ser utilizado de una forma transparente a través de las funciones de WinInet. Simplemente indicando que queremos trabajar sin conexión, podemos hacer cualquier tipo de llamada, pero sólo devolverán datos aquellas que encuentren la información en el caché de Internet Explorer.

Vamos a poner un ejemplo. Recordemos cómo escribir una pequeña rutina (simplificada) que recupere una página web, a través del protocolo HTTP:

{ HINTERNET hInet = InternetOpen("Agente WinInet", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, ); HINTERNET hPagina = InternetOpenUrl(hInet, "http://www.lawebdejm.com/index.html", NULL, , , NULL); char buff[1024]; DWORD size = 1024; InternetReadFile(hPagina, buff, 1024, &size); MessageBox(GetActiveWindow(), buff, "Contenido", MB_ICONINFORMATION); InternetCloseHandle(hPagina); InternetCloseHandle(hInet); }

Como vemos, este pequeño código recupera una página, la almacena en un buffer estático de 1024 bytes y la muestra en un mensaje.

Lógicamente, si la conexión a internet no está disponible, los datos no se podrán recuperar correctamente.

Sin embargo, podemos hacer un pequeño cambio, para acceder al caché en vez de acceder a internet. El cambio es tan sencillo como añadir la bandera INTERNET_FLAG_OFFLINE al último parámetro de InternetOpen:

{ HINTERNET hInet = InternetOpen("Agente WinInet", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_OFFLINE); HINTERNET hPagina = InternetOpenUrl(hInet, "http://www.lawebdejm.com/index.html", NULL, , , NULL); if (hPagina
NULL && GetLastError()
ERROR_FILE_NOT_FOUND) MessageBox(GetActiveWindow(), "El recurso no se encuentra en el caché de internet.", "Error de caché", MB_ICONINFORMATION); else { lectura como en el anterior código } }
Simplemente hemos añadido la opción INTERNET_FLAG_OFFLINE, y una comprobación para asegurarnos de que hemos encontrado el recurso en el caché. La mayoría de las funciones de WinInet, establecen el error ERROR_FILE_NOT_FOUND cuando intentan acceder a un recurso que no existe en el caché.

Como vemos, el uso del caché es totalmente transparente, y cambiando una simple bandera, podemos hacer que WinInet se comporte de una u otra forma.

Además, el uso de las funciones de WinInet no sólo consultan los datos del caché, sino que también almacenan los datos recuperados en él. Por ejemplo, cuando se ejecuta el primer código, y se lee el resultado hasta el final, la página quedará almacenada en el caché, a no ser que se haya incluido la bandera INTERNET_FLAG_NO_CACHE_WRITE en la llamada a InternetOpenUrl.

Para configurar este comportamiento, Las funciones de InternetConnect e InternetOpenUrl permiten ciertas banderas especiales, como por ejemplo con INTERNET_FLAG_NO_CACHE_WRITE, INTERNET_FLAG_PRAGMA_NOCACHE, INTERNET_FLAG_RESYNCHRONIZE, etc.
[editar]

Sé el primero en opinar


Tutoriales relacionados con 'Los rincones del API Win32: El caché de WinInet'

Damos una visión detallada de una de las características más interesantes de esta tecnología de... Más »
El protocolo FTP desde el API WinInet. Con este curso aprenderás a hacer un pequeño... Más »
Comienzo con un nuevo tema dentro dentro de la serie Los rincones del API Win32.... Más »
Entramos en temas interesantes: el acceso a recursos remotos a través del protocolo de aplicación... Más »
En el anterior curso dejamos muchos temas en el tintero, así que voy a terminar... Más »

Autor y licencia de 'Los rincones del API Win32: El caché de WinInet'


Tutorial de Juan Manuel. Extraido de: http://www.lawebdejm.com CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.