with tutorial framework español djangoproject desde con cero applications asp.net html screen-scraping

asp.net - tutorial - Obtener HTML de una página detrás de un inicio de sesión



tutorial django (8)

@Fire Lancer: me hice esa misma pregunta durante mis pruebas, así que lo verifiqué, y funciona desde un navegador.

Esta pregunta es un seguimiento de mi pregunta anterior sobre cómo obtener el HTML de una página ASPX. Decidí intentar usar el objeto webclient, pero el problema es que obtengo el HTML de la página de inicio de sesión porque es necesario iniciar sesión. Intenté "iniciar sesión" usando el objeto webclient:

WebClient ww = new WebClient(); ww.DownloadString("Login.aspx?UserName=&Password="); string html = ww.DownloadString("Internal.aspx");

Pero sigo recibiendo la página de inicio de sesión todo el tiempo. Sé que la información del nombre de usuario no está almacenada en una cookie. Debo estar haciendo algo mal o dejando de lado una parte importante. ¿Alguien sabe lo que podría ser?


Bueno, ¿abrir la página en un navegador con "Login.aspx? UserName = & Password =" normally work?
Es posible que algunas páginas no permitan el inicio de sesión utilizando los datos proporcionados en la url, y que se deben ingresar en el formulario de inicio de sesión en la página y luego enviarse.


Intente establecer la propiedad de credenciales del objeto WebClient

WebClient ww = new WebClient(); ww.Credentials = CredentialCache.DefaultCredentials; ww.DownloadString("Login.aspx?UserName=&Password="); string html = ww.DownloadString("Internal.aspx");


La única otra razón que se me ocurre es que la página web está bloqueando intencionadamente el inicio de sesión. Si tiene acceso al código, eche un vistazo al sistema de inicio de sesión utilizado para ver si hay algo diseñado para bloquear dichos inicios de sesión.


Simplemente pase los parámetros de inicio de sesión válidos a un URI determinado. Debería ayudarte.

Si no tiene información de inicio de sesión, no debe intentar eludirla.

public static string HttpPost( string URI, string Parameters ) { System.Net.WebRequest req = System.Net.WebRequest.Create( URI ); req.ContentType = "application/x-www-form-urlencoded"; req.Method = "POST"; byte[] bytes = System.Text.Encoding.ASCII.GetBytes( Parameters ); req.ContentLength = bytes.Length; System.IO.Stream os = req.GetRequestStream(); os.Write( bytes, 0, bytes.Length ); os.Close(); System.Net.WebResponse resp = req.GetResponse(); if ( resp == null ) return null; System.IO.StreamReader sr = new System.IO.StreamReader( resp.GetResponseStream() ); return sr.ReadToEnd().Trim(); }


Use Fiddler para ver las solicitudes HTTP y las respuestas que suceden cuando lo hace manualmente a través del navegador.


Use Firefox con el plugin LiveHttpHeaders .
Esto le permitirá iniciar sesión a través de un navegador real y VER EXACTAMENTE lo que se envía al servidor. Mi primera pregunta sería verificar que no se espera una POST del formulario. El URL de ejemplo que está cargando está enviando la información a través de un GET de querystring.


Como la página aspx que estaba tratando de obtener estaba en mi propio proyecto, podría usar el método Server.Execute. Más detalles en mi respuesta a mi pregunta original