Cómo pasar una contraseña al usar HtmlAgilityPack

c# html-agility-pack web-scraping

Pregunta

Estoy tratando de leer los archivos XML de un sitio web, estoy usando HtmlAgilityPack. Este es el código que estoy usando:

HtmlWeb web = new HtmlWeb( ) ;
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument( ) ;
doc = web.Load( "http://example.com/index.asp"  ) ;

La página solicita una contraseña que me han proporcionado, pero no estoy seguro de cómo pasar la contraseña para acceder a la página index.asp donde leeré los enlaces XML de la página.

El example.com/index.asp se ve así:

 <form action="index.asp" method="post">
 <table>
     <tbody>
         <tr>
            <td>
                <input type="Text" name="password" value="" size="20"> 
            </td>
         </tr>
     </tbody>
 </table>
</form

¿Cómo paso la contraseña a esta página desde HtmlAgilityPack? Vi un ejemplo aquí que usa 'HtmlWeb.PreRequest' pero realmente no entiendo demasiado sobre el proceso. Veo que HtmlWeb.Load tiene 7 sobrecargas pero no sé dónde colocar mi variable que contiene la contraseña.

doc = web.Load( "http://example.com/index.asp", "passwordVariable" ) ;

Si alguien pudiera dirigirme al camino correcto para investigar, realmente lo apreciaría.

Gracias

Respuesta aceptada

Creo que lo que estás buscando es publicar esta página e intentar acceder a otra página que esté protegida. La seguridad de las páginas web varía dramáticamente y el propietario puede estar intentando activamente evitar dicho acceso programático.

Para un sitio de seguridad simple que utiliza cookies, puede imitar las acciones que realiza un navegador solicitando la página de inicio de sesión, realizando un POST con las credenciales adecuadas (y los campos ocultos que puedan ser necesarios) capturando las cookies que se crearon y visitando el Página que desea visitar con las cookies suministradas.

    private HttpWebRequest CreateRequest(string url, string method)
    {
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.Referer = Host;
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36";
        request.Method = method;
        request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";

        return request;
    }

    public void Login()
    {
        byte[] bytes;
        string data;
        var SharedCookie = new CookieContainer();

        var url = "index.asp";

        try
        {
            //Start Session
            var request = CreateRequest(url, "GET");
            request.CookieContainer = SharedCookie;

            using (var tmpResponse = request.GetResponse())
            {
                //WriteResponse(tmpResponse);
                tmpResponse.Close();
            }

            //Login
            data = "password=123456";
            bytes = Encoding.UTF8.GetBytes(data);

            request = CreateRequest(url, "POST");
            request.CookieContainer = SharedCookie;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(bytes, 0, bytes.Length);
            }

            using (var tmpResponse = request.GetResponse())
            {
                //WriteResponse(tmpResponse);
                tmpResponse.Close();
            }
            IsLoggedIn = true;
        }
        catch (System.Net.WebException ex)
        {
            Console.WriteLine("Web Error:" + ex.Status);
            Console.WriteLine("Url:" + url);
            Console.WriteLine(ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Url:" + url);
            Console.WriteLine(ex.Message);
        }
    }


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué