jueves, 20 de marzo de 2008

ASP.NET - Recuperar contenido HTML de otra pagina web - III

Continuando con el ciclo de posts sobre métodos de recuparación de contenido HTML de otras páginas...
vamos a la 3era entrega:
Me estaba olvidando que no siempre funcionan estos métodos... pero ya son por motivos ajenos al código... me refiero a que a veces en algunas peticiones... antes de devolver la respuesta se verifica cierta información... y según eso, se procede o no a devolver el contenido de respuesta...

En el ejemplo que hice en la 2da entrega, no hemos tenido problemas para nada: no se nos ha exigido nada adicional más que el parámetro GET... osea, han sido muy confiados o tal vez no es necesario para este caso... no?
Pero no siempre es así.

En el ejemplo que ahora haremos (...), aparte de enviarle los parámetros POST necesarios para que la consulta se procese... hay que enviarle un id de usuario que está en un control oculto ... ese valor es webcom...
pero ademaaaaaaaaaaaaaaas de eso, antes de que nos devuelvan la respuesta... están verificando si la consulta que está solicitando esa data procede de una url específica... buena no? algunos quieren saber desde qué dominio procede la consulta y otros simplemente cuál es la página. Osea... en este caso tenemos que especificarle desde dónde tratamos de obtener la data... mejor dicho: podemos obtener la data que queremos... pero a través de la página que ellos permitan...

y esto por qué?
pues seguramente en esa página pueden haber validaciones y quién sabe que otras cosas más que previamente se debe chequear antes de que se envíe la respuesta... espectacular cierto?

el código se los muestro a continuación... pero experimenten qué pasa si comentan esta línea...
'_request.Referer = "http://www.webcom.com/html/tutor/forms/start.shtml"

si lo hacen verán que nos retorna un mensaje de error como este:











este sería el código:
nose olviden de importar Imports System.IO y Imports System.Net

Dim _request As HttpWebRequest
Dim _response As HttpWebResponse
Dim _sw As StreamWriter, _sr As StreamReader

Dim _DataToPost As String = String.Format("your_name={0}&userid={1}", "Segundo Serrano", "webcom")

_request = WebRequest.Create("http://www.webcom.com/cgi-bin/form")
_request.Method = "POST"

_request.Referer = "http://www.webcom.com/html/tutor/forms/start.shtml"

_request.ContentLength = _DataToPost.Length
_request.ContentType = "application/x-www-form-urlencoded"

Try
_sw = New StreamWriter(_request.GetRequestStream)
_sw.Write(_DataToPost)
_sw.Close()

_response = _request.GetResponse
_sr = New StreamReader(_response.GetResponseStream)

Response.Write(_sr.ReadToEnd.Trim)
_sr.Close()

Catch ex As Exception
Response.Write(ex.Message)
End Try
esta respuesta sí que alienta!!!

No hay comentarios.: