Come passare una password quando si utilizza HtmlAgilityPack

c# html-agility-pack web-scraping

Domanda

Sto cercando di leggere i file XML di un sito Web, sto usando HtmlAgilityPack. Questo è il codice che sto usando:

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

La pagina richiede una password che mi hanno fornito, ma non sono sicuro di come passare la password per accedere alla pagina index.asp dove leggerò i collegamenti XML della pagina.

Il file example.com/index.asp ha il seguente aspetto:

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

Come posso passare la password a questa pagina da HtmlAgilityPack? Qui ho visto un esempio che utilizza 'HtmlWeb.PreRequest', ma non capisco molto del processo. Vedo che HtmlWeb.Load ha 7 overload ma non so dove mettere la mia variabile che contiene la password.

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

Se qualcuno potesse guidarmi sulla strada giusta per la ricerca, lo apprezzerei davvero.

Grazie

Risposta accettata

Penso che quello che stai cercando è di pubblicare questa pagina e provare ad accedere ad un'altra pagina che è protetta. La sicurezza delle pagine Web varia notevolmente e il proprietario potrebbe tentare attivamente di impedire tale accesso programmatico.

Per un sito di sicurezza semplice che utilizza i cookie, è possibile simulare le azioni eseguite da un browser richiedendo la pagina di accesso, eseguendo un POST con le credenziali appropriate (e eventuali campi nascosti eventualmente richiesti) catturando i cookie creati e navigando nel pagina che vuoi visitare con i cookie forniti.

    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

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow