Error al capturar texto de pagina web VB.NET 2008

Iniciado por LuckyLucciano, 11 Julio 2013, 02:00 AM

0 Miembros y 1 Visitante están viendo este tema.

LuckyLucciano

Hola a todos, buenas tardes! Este es mi primer thread en esta comunidad y, antes que nada, quería agradecerles a los que leen y a los que me puedan llegar a dar una ayuda con este tema.
Voy al grano:

Estoy desarrollando un programa y, una de sus funciones es verificar el estado del streaming de una radio online mediante la correspondiente página en SHOUTcast. Hasta ahí todo normal. Básicamente lo que hago es acceder, por ejemplo, a http://185.2.129.30:9312/index.html y buscar la frase "Server is currently up". Ya lo he hecho usando un webcontrol pero no me gusto mucho como me quedó. Buscando como mejorarlo y evitar el webcontrol, encontre el httpwebrequest y el webclient pero no logro hacerlos andar correctamente. Bien, les paso el codigo como está hasta ahora:

Código:

Código (vb) [Seleccionar]

Dim MyWebClient As New WebClient
Dim TextoWeb As String
TextoWeb = MyWebClient.DownloadString("Pagina.Text")
If Instr(Pagina.Text, FraseABuscar.Txt) > 0 Then
MsgBox("Encontrado!")
Else: MsgBox("No hubo suerte!")
End If


Bien, este código me da el error: "El servidor ha cometido una infracción de protocolo. Section=ResponseStatusLine"
Peeeeeeero, si en vez de esa página lo hago sobre, por ejemplo, www.Google.com, no me tira error. Entiendo que es un error de protocolo, pero no entiendo como solucionarlo.

Gracias y saludos!

raul338


LuckyLucciano

Cita de: raul338 en 11 Julio 2013, 02:29 AM
Lo muevo a .net

Esto te va a servir: Acceder al contenido de una página Web - elGuille

Buenisimo, gracias! No habia visto que había un foro dedicado a .NET!

En cuanto a la ayuda, gracias, pero justamente en eso base mi código. Lo que sucede es que, con páginas normales como www.google.com o cualquier otra página estandar, funciona, pero en el tipo de página que necesito yo, que seria http://185.2.129.30:9312/index.html no me funciona. La diferencia que encuentro, es que con las páginas .com, .net, .gov, etc funciona bien, pero con estas .html no y no se como resolverlo...

Gracias y saludos!!!

El Benjo

Puedes utilizar las clases HttpWebRequest y HttpWebResponse he implementarlas de la siguiente manera:

Código (vbnet) [Seleccionar]

Dim Peticion As HttpWebRequest
Dim Respuesta As HttpWebResponse
Dim ObjLector As StreamReader
Dim CadenaDevuelta As String

        Peticion = WebRequest.Create("Url")
        Respuesta = Peticion.GetResponse
        ObjLector = New StreamReader(Respuesta.GetResponseStream)
        CadenaDevuelta = ObjLector.ReadToEnd


Con eso debe abrirte también las páginas con extensión html. Saludos
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

LuckyLucciano

Hola Amigazo!, gracias por el aporte pero no, ya lo intente y no funciona. Te paso una imagen del error:



Mucha gracias por la ayuda y espero que puedan darme una manito para resolverlo!!!   ;-)

El Benjo

En tu código puedo ver que accedes a una dirección IP en concreto, ¿sólo te ocurre en esa dirección o has intentado con otras páginas o direcciones y ocurre lo mismo? En caso de que sólo ocurra con esa dirección es posible que sea problema del servidor al que haces la llamada.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

LuckyLucciano

Si, pasa igual con todas las páginas con ese formato (o al menos de SHOUTcast que es justamente desde donde tengo que verificar información)...

Te comento que si lo hago con un webbrowser, navegando la pagina, accediendo al HTML y buscando el str me funciona, pero la idea es hacer que esta función ande dentro de un thread o un backgroundwork y con el webbrowser no me funciona.  :-\

Se te ocurre alguna otra forma para verificar el HTML de una página y hacerlo funcionar en un thread?

Muchas gracias por tu buena onda!!!  :D

El Benjo

Te comento que con el control webbrowser también puedes hacerlo en segundo plano (creo yo) bastaría crear un nuevo control webbrowser mediante código y acceder a sus propiedades y métodos como si lo hubieras creado con el diseñador de windows forms.

Es una solución temporal, pero es igualmente buena y por lo que me comentas puede ser la única que funciona para tus propósitos.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

LuckyLucciano

El Benjo, antes que nada, quiero agradecerte tu interes, de verdad, muchisimas gracias! Si, lo que me ofreces está bueno y de hecho lo he intentado, pero mis conocimientos sobre .NET no son muuuuuuuuuuy grandes... basicamente soy un muy buen adaptador de códigos que encuentro por ahí y tengo creatividad para resolver problemas... pero todavía estoy muuuuuuy verde en cuanto a conocimientos de POO y, en este caso, VB.NET. Vos serias TAN amable de darme un ejemplo de cómo crear el webcontrol mediante código?

Muchisimas gracias por tu buena onda!!!

El Benjo

 ;D Desde luego, ya sabes que el foro es para eso.

Simplemente basta con hacer la declaración como haría con cualquier variable:

Código (vbnet) [Seleccionar]

Dim ControlWeb As WebBrowser


Eso es todo lo que tienes que hacer para declarar el objeto. Ese Dim lo puedes sustituir por Public o Private según lo requiera tu aplicación.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.