Leer el codigo HTML de una página web con visual basic 6 (vb6)
Bienvenidos a VerTutoriales.com en esta ocasión os traigo un código para Visual Basic 6 (vb6) con el cual podremos cargar el código fuente de una página web cualquiera.
En otro tutorial expliqué como poder realizar un actualizador de versiones para nuestro programa en vb6, pero lo veia poco optimo el tener que descargar un archivo y leerlo, así que puesto manos a la obra encontré una manera algo más limpia, leer el contenido de una web, que no tiene por que ser una web completa (aunque el código que utilizo vale para leer integramente el codigo fuente de una web), así que podemos crear una web con un dato que leamos desde vb6 y luego tratar esa información como queramos.
Así que vamos al lio, para este tutorial vamos a necesitar un modulo para cargar varias funciones de la API de Windows. El código que debemos insertar es el siguiente:
Option Explicit
Public Declare Function InternetOpen Lib “wininet.dll” Alias “InternetOpenA” (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Public Declare Function InternetOpenUrl Lib “wininet.dll” Alias “InternetOpenUrlA” (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Public Declare Function InternetReadFile Lib “wininet.dll” (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Public Declare Function InternetCloseHandle Lib “wininet.dll” (ByVal hInet As Long) As IntegerPublic Const IF_FROM_CACHE = &H1000000
Public Const IF_MAKE_PERSISTENT = &H2000000
Public Const IF_NO_CACHE_WRITE = &H4000000Public Const BUFFER_LEN = 256
Una vez tenemos declaradas las funciones que vamos a utilizar en nuestro modulo, vamos a leer nuestra web utilizando el siguiente código, tened en cuenta que necesitamos una caja de texto en la cual vamos a insertar el código que leemos con visual basic. El script es el siguiente:
Public Function LeeURL(sURL As String) As String
Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
Dim hInternet As Long, hSession As Long, lReturn As Long‘get the handle of the current internet connection
hSession = InternetOpen(“vb wininet”, 1, vbNullString, vbNullString, 0)
‘get the handle of the url
If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
‘if we have the handle, then start reading the web page
If hInternet Then
‘get the first chunk & buffer it.
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sBuffer
‘if there’s more data then keep reading it into the buffer
Do While lReturn <> 0
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sData + Mid(sBuffer, 1, lReturn)
Loop
End If‘close the URL
iResult = InternetCloseHandle(hInternet)LeeURL = sData
End Function
La función que acabamos de ver LeeURL recibe un parametro llamado sURL la cual será la dirección de nuestra página web, por ejemplo: http://www.vertutoriales.com. Esta función LeeURL, lo siguiente que hace es manejar la conexión y comprobar si es todo correcto y una vez hecha la conexión lee hasta llegar al final de la web. De esta manera, devuelve todo el texto leido.
Muy sencilla de utilizar, lo único que hará falta será llamar a esta función con el parametro sURL, es decir, con la página web que queramos leer. Sería de la siguiente manera:
txtContenido.Text = LeeURL(“http://www.vertutoriales.com”)
txtContenido es un objeto TextBox, al cual le asignamos el retorno de la función LeeURL, que a su vez estamos pasandole la url que en nuestro caso hemos puesto http://www.vertutoriales.com
Y eso es todo, una vez llamamos a la función esta puede tener algún tipo de retardo, dependiendo de nuestra conexión y tambien la del servidor, lo normal de un navegador.
Ahora dependerá de lo que hagamos con esa lectura, como comenté al principio, yo lo he utilizado para saber la versión de un programa de gestión que estoy utilizando, cada vez que arranca mi programa, compruebo si la versión en internet es más nueva, si es así, solo lanzo una descarga del nuevo archivo con la nueva versión. Pero podeis utilizarlo para más cosas como buscar emails… etc…
¿Que se os ocurre a vosotros?
Un saludo!
Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
Dim hInternet As Long, hSession As Long, lReturn As Long
‘get the handle of the current internet connection
hSession = InternetOpen(“vb wininet”, 1, vbNullString, vbNullString, 0)
‘get the handle of the url
If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
‘if we have the handle, then start reading the web page
If hInternet Then
‘get the first chunk & buffer it.
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sBuffer
‘if there’s more data then keep reading it into the buffer
Do While lReturn <> 0
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sData + Mid(sBuffer, 1, lReturn)
Loop
End If
‘close the URL
iResult = InternetCloseHandle(hInternet)
GetUrlSource = sData
End Function
Comments
He probado el código y funciona bien. Pero, si la pagina pide usuario y password, cómo modificar el código para ello.
Gracias, soy un aficionado novato y curioso.
Buenas Paco, lo que estás pidiendo no es lectura de una página web, sino envio a una página web.
Hice algo parecido pero fué una chapuza, ya que utilicé el servidor xampp que tenía instalado en mi pc, creé una página que recibia los parámetros desde visual basic y accedía a esa página web enviandole los parámetros que necesitaba.
Supongo que hablamos de lo mismo, y lo que quieres es poder realizar un login desde vb, o simplemente enviar datos a una web para que las utilice.
Hay otras formas de realizarlo enviando cabeceras, pero por falta de tiempo dejé el proyecto. Así que estaría agradecido si compartes tus dudas y avances con nosotros para que podamos aprender todos!
Un saludo!
Hola, no soy un profesional y no sé si lo que voy a preguntar es una burrada, pero ¿se podría adaptar este código para utilizarlo en una página web?
Para eso hay otras funciones, pero necesitarias un lenguaje servidor como PHP o ASP.
Con un código parecido de lectura al de este tutorial
http://www.vertutoriales.com/index.php/saber-si-un-dominio-esta-libre-con-php/
Podrías leer el código desde PHP y usarlo a tu antojo.
Hola,
te agradezco enormemente tu respuesta que me sirve muchísimo. Yo el lenguaje servidor que conozco es ASP, ¿existen en ASP funciones análogas a la fopen de php o a la internetopen de VB6?, ¿tenéis algún tutorial al respecto?
Un saludo.
Sobre ASP no tengo ningún tutorial ya que trabajo con PHP. De manera que no podría ofrecerte más que un enlace, creo que en este le dan solución http://forums.devshed.com/asp-programming-51/asp-equivalent-of-php-s-fopen-132175.html, el código que plantea un último colaborador es el siguiente:
Espero que te sirva.
Hola,
seguro que me sirve, de nuevo muchas gracias por tu ayuda. Seguiré pendiente de tu página que me ha parecido muy interesante.
Un saludo.
Gracias! ya sabes que si tienes alguna duda más, por aquí estaremos 🙂
muchas gracias por el código, pero tengo un problema, las págiunas que quiero sacar el código traen Entre 2007 y 2009 el número de jóvenes asesinados jóvenes de 20 a 24 años, 156%, y el de 25 a 29 años, 152%.
no soy un experto, cómo puedo hacer para que me reconozca los acentos y las ñ, etc.
Muchas gracias
Entiendo que lo que te ocurre es que los códigos que lees con visual basic trae el estandar y lo quieres convertir.
Para ello solo tendrás que realizar un replace de la siguiente manera:
Replace(“textoOriginal”, “texto a buscar”, “texto a reemplazar”, , , vbTextCompare)
Por ejemplo:
Replace(“jóvenes asesinados”, “ó”, “ó”, , , vbTextCompare);
Con esta función podrás cambiar todas las oes acentuadas, puedes hacerlo con el resto de vocales y letras especiales como la ñ 🙂
muchas gracias por la respuesta, hay páginas que ponen los acentos con el nombró, Peña, después, etc, existe alguna forma de que al leer la página ponga los acentos y la ñ como debe de ser ?
muchas gracias por el apoyo
al subir el comentario pone bien las ñ y los acentos, pero veo varios & cute, & ntilde etc, cuando lee el código en el text box
Bueno, otra forma no conozco, haces la lectura y luego pasas los filtros necesarios para que quede como quieres.
En este caso pues el ejemplo que ponía:
Replace(“jóvenes asesinados”, “& oocute”, “ó”, , , vbTextCompare);
Es decir, letra por letra posible. Tampoco son tantas 🙂
un favor me pueden ayudar, tengo dos problemas, uno es quiero entrar a una página web que no se puede leer el código fuente porque lo tienen protegido, trato de darle botón derecho y tampoco me deja, y el otro problema como puede mandar un usuario y un password para accessar a una página web.
Estoy programando con Visual basic 6
Muchas gracias
Para ver el código fuente puedes ir a Archivo > Guardar Como y guardar la página dejandote ver la codificación de la misma en tu propio disco.
Y para el segundo problema, es algo más complejo ya que tienes que hacer una conexión y demás, aunque dependiendo del tipo de form, puedes hacer tambien utilizando un webbrowser:
WebBrowser.Navigate “http://vertutoriales.com/form.php?usuario=nombre&pass=lapass”
Aunque no es la manera más eficaz y en muchos casos no será suficiente 🙂
Gracias por responder, perdón no me explique bien en el primer caso, cuando trato de leer la página con el programa no me trae nada de información, revisando la cadena que regresa viene con el encabezado solamente, o sea no regresa el código de la página ( y es lo que necesito), para revisar que pasa entré a la página y quise copiar con el botón derecho y es cuando comprobe que la página está protegida, como puedo desde código desproteger la página para que me envie el código fuente.
Muchas gracias
Buenas de nuevo.
Es muy extraño lo que me comentas, en realidad lo del botón derecho no tiene mucho sentido, lo único que hace es controlar el evento del ratón y no deja que continue cuando se pulsa el botón derecho mostrandote un mensaje, por lo que realmente el código sigue estando en su sitio y sigue siendo accesible del programa.
Comprueba los siguientes puntos:
– La caja de texto tiene que estar en multilinea
– Ponle que tenga scroll.
Es posible que no muestre más información en la caja por que la misma caja no deja mostrarla, en su defecto, puedes utilizar un msgbox para mostrar a ver que ocurre.
Un saludo!
Excelente!!!, muchas gracias ya funciono el poder bajar el código, me queda pendiente lo del usuario y contraseña, lo voy a probar y te mantengo informado.
MIL GRACIAS
Me alegro, ya nos cuentas como te fué.
Con otra pregunta, al leer las páginas me encuentro con algunos caracteres que no me los cambia Visual y otros que no encuentro cual es, algunos vienen con una à (seguido de otro caracter), así hay varios son letras mayúsculas acentuadas y la ü, he buscado en la red las conversiones de esos caracteres, pero no he encontrado nada, sabes si se puede hacer algo ?
Cómo siempre muy agradecido por el apoyo
Saludos
Si puedes buscar la codificación completa es decir la à con el otro caracter, será posible hacer un replace() pero tendrás que saber cual es el caracter a convertir.
¿Es posible que lo de los caracteres sea por el idioma?
Si los encuentras te agradecería que los compartieras 🙂
He usado el codigo para poder sacar las el nombre de las calles via openstreet, lo que sucede es que funciona bien por un tiempo, pero luego de ello deja de funcionar y tengo que cerrar el programa y volverlo a abrir, he notado que tanto el hinternet como el hsession devuelven 0.
Saludos,
Si devuelve 0 es que no está leyendo o devuelve vacío sino recuerdo mal y puedo ver sobre el código, pero no lo sé a ciencia cierta.
Si te está funcionando al principio y luego se te cuelga, prueba a darle un poco de espacio o comprueba que haya terminado de leer para volver a lanzarlo. Cierra todo o inicializa variables y demás.
Prueba con eso, sino te funciona para la lectura de la web y se te cuelgue, coméntalo y probamos otras cosas.
Un saludo!