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