Htmlagilitypack après la connexion

c# facebook html-agility-pack httprequest

Question

Je veux analyser un site HTML comme Facebook,
Exemple (www.facebook.com/somePage)
Si je veux coller ce lien dans mon explorateur, il me redirigera d'abord pour me connecter à mon compte. Je ne vois donc pas cette page. Je ne peux donc pas utiliser Htmlagilitypack pour obtenir une réponse.
Alors, comment puis-je me connecter d'abord au site par programmation (sans utiliser le contrôle WebBrowser) puis appeler cette page facebook et obtenir une réponse et une analyse avec Htmlagility Pack Je sais Comment puis - je utiliser pack HtmlAgility et je sais que la définition de cookies avec HTTPRequest I Utilisez le code suivant pour définir les cookies , mais après comment puis - je analyser cette somepage

CookieCollection cookies = new CookieCollection();
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.facebook.com");
            request.CookieContainer = new CookieContainer();
            request.CookieContainer.Add(cookies);
            //Get the response from the server and save the cookies from the first request..
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            cookies = response.Cookies;
            response.Close();
        }
        catch (WebException)
        {
            MessageBox.Show("error");
        }

        string getUrl = "https://www.facebook.com/login.php?login_attempt=1";
        string postData = String.Format("email={0}&pass={1}", "xxxx@hotmail.com", "xxxxx");
        HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl);
        getRequest.CookieContainer = new CookieContainer();
        getRequest.CookieContainer.Add(cookies); //recover cookies First request
        getRequest.Method = WebRequestMethods.Http.Post;
        getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
        getRequest.AllowWriteStreamBuffering = true;
        getRequest.ProtocolVersion = HttpVersion.Version11;
        getRequest.AllowAutoRedirect = true;
        getRequest.ContentType = "application/x-www-form-urlencoded";

        byte[] byteArray = Encoding.ASCII.GetBytes(postData);
        getRequest.ContentLength = byteArray.Length;
        Stream newStream = getRequest.GetRequestStream(); //open connection
        newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
        newStream.Close();
        //How I parse (www.facebook.com/somePage) here?
       HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
       HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
       using (StreamReader sr = new StreamReader(getResponse.GetResponseStream(), Encoding.GetEncoding("windows-1251")))
        {

            doc.LoadHtml(sr.ReadToEnd());

        }

        foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
        {
            listBox1.Items.Add(link.InnerHtml);
        }

Réponse acceptée

Sur votre HttpWebRequest appelez la méthode GetResponse . Cela WebResponse un objet WebResponse sur lequel vous pouvez appeler GetResponseStream() pour accéder au contenu.

Étant donné que Facebook ne renvoie presque pas de contenu HTML (ils envoient une charge de JavaScript au navigateur à partir duquel le document est généré), le HtmlAgilityPack ne vous aidera pas vraiment. Il téléchargera le code Javascript, mais ne peut pas l'exécuter, vous êtes donc coincé avec un document difficile à interpréter.

D'autres paquets HTML, comme Awesonium ou PhantomJS, peuvent en réalité exécuter le Javascript et vous renvoyer le HtmlDomDocument interprété. Ceux-ci ne vous obligeront pas à exécuter tout le navigateur, ils peuvent tous deux exécuter Headless (comme il est appelé pour exécuter un navigateur sans interface utilisateur par-dessus).

Vous pouvez également utiliser l' API Facebook Graph pour accéder aux données sur Facebook sans analyser le code HTML. Il est beaucoup plus stable et conçu pour interagir avec les données sur Facebook.




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