Problema al leer codigo html de una web

Iniciado por s_azazel, 26 Abril 2017, 11:20 AM

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

s_azazel

Buenos dias estoy intentando sacar el codigo de una web pero me tira error todo el rato y la verdad no se por que... con otras webs si funciona correctamente no se si estara protegida o algo

Sin embargo al usar el control WebBrowser si que me deja leer el codigo html pero necesito mas velocidad para no ir mostrando todas las paginas :D

Os dejo el codigo que tengo: con el nombre de la web inculida

Código (vbnet) [Seleccionar]
Dim URl As String = "https://es.magiccardmarket.eu/"

       Try
           Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(URl)
           Dim response As System.Net.HttpWebResponse = request.GetResponse()

           Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())
           Dim sourcecode As String = sr.ReadToEnd()
           TextBox1.Text = sourcecode
       Catch ex As Exception
           MessageBox.Show("Invalid Url")
           Return
       End Try


Mil gracias!!!!

Eleкtro

#1
Para solucionarlo, simplemente asígnale un user-agent conocido a la petición http y listo. Aparte de eso, tienes una fuga de recursos sin liberar, puedes mejorar el código. Ten presente la importancia de llamar al método Object.Dispose() o en su defecto decorar un bloque de código con la sentencia Using:

Código (vbnet,9,12,13,14,15) [Seleccionar]
Dim uri As New Uri("https://es.magiccardmarket.eu/")
Dim html As String

Try
   Dim req As HttpWebRequest = HttpWebRequest.Create(uri)
   With req
       .Method = "GET"
       .Accept = "text/html"
       .UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"
   End With

   Using res As HttpWebResponse = req.GetResponse(),
         sr As New StreamReader(res.GetResponseStream(), Encoding.UTF8)
       html = sr.ReadToEnd()
   End Using
   TextBox1.Text = html

Catch ex As WebException
   Debug.WriteLine(String.Format("Response Status: {0}", ex.Status.ToString()))
   Throw

Catch ex As Exception
   Throw

End Try


Por último, recuerda que también puedes utilizar la clase WebClient, la cual es un wrapper/abstracción de la clase HttpWebRequest y eso es lo que deberías utilizar preferiblemente para peticiones simples como ésta:
Código (vbnet) [Seleccionar]
Dim uri As New Uri("https://es.magiccardmarket.eu/")
Dim html As String

Using wc As New WebClient
   wc.Encoding = Encoding.UTF8
   wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")

   Try
       html = wc.DownloadString(uri)
       TextBox1.Text = html

   Catch ex As WebException
       Debug.WriteLine(String.Format("Response Status: {0}", ex.Status.ToString()))
       Throw

   Catch ex As Exception
       Throw

   End Try

End Using


PD: La diferencia de tiempo total de ejecución entra uno y el otro, se mide en milisegundos.

¡Saludos!