Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: LuckyLucciano en 11 Julio 2013, 02:00 am



Título: Error al capturar texto de pagina web VB.NET 2008
Publicado por: LuckyLucciano en 11 Julio 2013, 02:00 am
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
  1. Dim MyWebClient As New WebClient
  2. Dim TextoWeb As String
  3. TextoWeb = MyWebClient.DownloadString("Pagina.Text")
  4. If Instr(Pagina.Text, FraseABuscar.Txt) > 0 Then
  5. MsgBox("Encontrado!")
  6. Else: MsgBox("No hubo suerte!")
  7. End If
  8.  

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!


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: 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 (http://www.elguille.info/net/dotnet/system_net_acceder_pagina_web.aspx)


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: LuckyLucciano en 11 Julio 2013, 04:58 am
Lo muevo a .net

Esto te va a servir: Acceder al contenido de una página Web - elGuille (http://www.elguille.info/net/dotnet/system_net_acceder_pagina_web.aspx)

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!!!


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: El Benjo en 11 Julio 2013, 20:15 pm
Puedes utilizar las clases HttpWebRequest y HttpWebResponse he implementarlas de la siguiente manera:

Código
  1. Dim Peticion As HttpWebRequest
  2. Dim Respuesta As HttpWebResponse
  3. Dim ObjLector As StreamReader
  4. Dim CadenaDevuelta As String
  5.  
  6.        Peticion = WebRequest.Create("Url")
  7.        Respuesta = Peticion.GetResponse
  8.        ObjLector = New StreamReader(Respuesta.GetResponseStream)
  9.        CadenaDevuelta = ObjLector.ReadToEnd
  10.  

Con eso debe abrirte también las páginas con extensión html. Saludos


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: LuckyLucciano en 12 Julio 2013, 00:46 am
Hola Amigazo!, gracias por el aporte pero no, ya lo intente y no funciona. Te paso una imagen del error:

(http://i41.tinypic.com/33vj1c2.jpg)

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


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: El Benjo en 12 Julio 2013, 01:01 am
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.


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: LuckyLucciano en 12 Julio 2013, 02:52 am
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


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: El Benjo en 12 Julio 2013, 05:51 am
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.


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: LuckyLucciano en 12 Julio 2013, 06:00 am
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!!!


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: El Benjo en 12 Julio 2013, 06:09 am
 ;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
  1. Dim ControlWeb As WebBrowser
  2.  

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.


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: LuckyLucciano en 14 Julio 2013, 02:24 am
Hola El Benjo , te molesto por ultima vez en este hilo para decirte felizmente que pude resolverlo. Si bien lo resolví de una forma que no era la planteada en este hilo (usando webclient), una solución es una solución!!!

Lo que hice fue hacer un webcontrol y dos backgroundworkers, uno abre la página cada x cantidad de segundos, el otro lee el código HTML cada x cantidad de segundos... esto antes me tiraba un error de invalidcastexception al intentar leer el codigo, pero leyendo un poco me entere que ese tipo de accesos al objeto hay que hacerlos en el evento doworkcompleted.

Bueno, nada, agradecerte infinitamente por tu tiempo y tu conocimiento, sos un groso!


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: El Benjo en 14 Julio 2013, 05:16 am
Me halagas, pero aquí hay gente que es mucho mejor. Si no me crees échale un vistazo (si no lo has hecho) al concurso de aplicaciones que se está llevando a cabo en este mismo foro:

http://foro.elhacker.net/programacion_general/ehndev_2013_concurso_de_desarrollo_de_aplicaciones_hilo_oficial-t391786.0.html

Y qué bueno que pudiste encontrar la solución tú mismo, esa creo que es la mejor forma de aprender.

Suerte.


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: Eleкtro en 14 Julio 2013, 05:20 am
Habría sido genial que hubiesen encontrado una solución usando requests.

Aunque no he comentado nada al respecto pero la verdad es que este tema me interesa bastante y estuve probando varias cosas para conseguir resolverlo,
desde permitir headers inseguros en la aplicación (activar los unsafeheaders) para corregir el problema de los headers, pero siempre se queda colgado con la url de shoutcast,
también estuve indagando en dos sources de dos proyectos de Shoutcast en CodeProject, pero eran streamrippers y no obtenian la información necesaria, es más estan un poco obsoletos,
Me llegué a mirar decenas de resultados en todo Google pero parece que nadie en todo el mundo tiene idea de como corregir el problema principal de los headers con la url de shoutcast, siempre se comenta los unsafeheaders, pero los unsafeheaders no sirven para este problema.

...Lo dicho, estaría muy bien que un experto en la materia diese una solución más sutil que usar un webbrowser.

@LuckyLucciano
Me alegro de que lo hayas conseguido.

Saludos


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: El Benjo en 14 Julio 2013, 05:32 am
Eso que comentas, elektro, sería muy interesante y creo que la manera que se me viene a la mente para resolverlo, sería analizando como trabaja el webbroser, pero tendríamos que analizar su código o el código de un browser de código abierto como Mozilla (supongo que es código abierto).

La otra forma que se me ocurre para resolverlo sería analiznado la manera en que devuelve información shoutcast y crear un control que emule el protocolo en cuestión (imagino que HTTP) o demás protocolos que hicieran falta.

¿Tú qué opinas?


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: Eleкtro en 14 Julio 2013, 18:03 pm
¿Tú qué opinas?
No soy quien para opinar sobre protocolos, el nivel web no es lo mio xD.

Lo que si tengo claro es que los headers hay que eliminarlos y agregar los de Shoutcast, al menos eso es lo que he visto hacer por ahí, pero con eso no parece ser suficiente para requerir la información del "Status" del server.

Saludos!


Título: Re: Error al capturar texto de pagina web VB.NET 2008
Publicado por: ciru3 en 30 Enero 2017, 21:05 pm
Se que pasó mucho tiempo desde el ultimo post, pero quería hacer saber que tenía un problema similar con un página, y logré solucionarlo agregando un user-agent. Por ejemplo, yo he agregado:
Código:
httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"

Y con eso el servidor me responde correctamente. Espero que les sirva.