Tengo el siguiente código que funciona en algunos sitios en los que he intentado buscar información, pero no funcionará en un sitio en particular que he intentado, y aparece el error "La conexión subyacente se cerró: la conexión se cerró inesperadamente. " ¿Por qué funcionaría esto en algunos sitios y no en otros? Si se usa en siteA, por ejemplo, obtengo el último hipervínculo en div "wrapper". Pero en otro sitio, acabo de obtener la conexión cerrada. por favor ayuda.
Private Function getText() As String
Dim web = New HtmlWeb()
Dim html As HtmlDocument
html = web.load("http://some-website.com")
Dim lastLink = html.DocumentNode.SelectSingleNode("//div[@id='wrapper']//a[last()]")
If lastLink IsNot Nothing Then
Return lastLink.InnerHtml
Else
Return "nothing found"
End If
End Function
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
label4.Text = getText()
End Sub
Hay muchas razones posibles para eso. La ejecución de Javascript diferido viene a la mente o es un tipo de cambio de navegador arcaico. Podría ser útil verificar los encabezados de solicitud de los navegadores con los que se usan en HtmlAgilityPack.
Lo primero que haría es usar la misma cadena de agente de usuario:
Private Function getText() As String
Dim web = New HtmlWeb()
web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36"
Dim html As HtmlDocument
html = web.load("http://some-website.com")
Dim lastLink = html.DocumentNode.SelectSingleNode("//div[@id='wrapper']//a[last()]")
If lastLink IsNot Nothing Then
Return lastLink.InnerHtml
Else
Return "nothing found"
End If
End Function
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
label4.Text = getText()
End Sub
Supongo que su navegador puede darle una pista sobre el encabezado de la solicitud real (por ejemplo, Chrome Developer Tools, Firebug). Se puede hacer una manera rápida de comparar ambas configuraciones en http://www.mybrowserinfo.com/ . Si tiene su propio servidor web, simplemente vea en los registros. Si esto no ayuda a deshacerse del tráfico sería la opción de fuerza bruta.