Comment passer un mot de passe lors de l'utilisation de HtmlAgilityPack

c# html-agility-pack web-scraping

Question

J'essaie de lire les fichiers XML d'un site Web, j'utilise HtmlAgilityPack. C'est le code que j'utilise:

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

La page demande un mot de passe qu’ils m’ont fourni, mais je ne sais pas comment le transmettre pour accéder à la page index.asp sur laquelle je lirai les liens XML.

Example.com/index.asp se présente comme suit:

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

Comment passer le mot de passe à cette page à partir de HtmlAgilityPack? J'ai vu un exemple ici qui utilise 'HtmlWeb.PreRequest' mais je ne comprends pas trop le processus. Je vois que HtmlWeb.Load a 7 surcharges mais je ne sais pas où mettre ma variable qui contient le mot de passe.

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

Si quelqu'un pouvait me diriger vers le droit chemin de la recherche, je l'apprécierais vraiment.

Je vous remercie

Réponse acceptée

Je pense que ce que vous recherchez, c'est de poster cette page et d'essayer d'accéder à une autre page protégée. La sécurité des pages Web varie considérablement et le propriétaire peut essayer activement d'empêcher un tel accès par programme.

Pour un site simplement sécurisé qui utilise des cookies, vous pouvez reproduire les actions d’un navigateur en demandant la page de connexion, en effectuant un POST avec les informations d’identité appropriées (ainsi que tous les champs cachés éventuellement requis), en capturant les cookies créés et en accédant à la page que vous voulez visiter avec les cookies fournis.

    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);
        }
    }



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi