Utilisation de BrowserSession et de HtmlAgilityPack pour vous connecter à Facebook via .NET
Je suis en train d'utiliser Rohit Agarwal est BrowserSession classe avec HtmlAgilityPack pour vous connecter et naviguer ensuite autour de Facebook.
J'ai déjà réussi à faire la même chose par écrit mes propres HttpWebRequest. Toutefois, il ne fonctionne que quand j'ai manuellement récupérer les cookies de mon navigateur et insérer un cookie fresh-chaîne de la demande chaque fois que je fais une nouvelle "session". Maintenant, je suis en train d'utiliser BrowserSession à devenir plus intelligent de navigation.
Voici le code actuel:
BrowserSession b = new BrowserSession();
b.Get(@"http://www.facebook.com/login.php");
b.FormElements["email"] = "[email protected]";
b.FormElements["pass"] = "xxxxxxxx";
b.FormElements["lsd"] = "qDhIH";
b.FormElements["trynum"] = "1";
b.FormElements["persistent_inputcheckbox"] = "1";
var response = b.Post(@"https://login.facebook.com/login.php?login_attempt=1");
Ci-dessus fonctionne très bien. La difficulté vient quand j'essaie d'utiliser cette BrowserSession de nouveau pour aller chercher une autre page. Je suis en train de faire de cette façon depuis BrowserSession enregistre les cookies à partir de la dernière réponse et les insère dans la prochaine demande, donc je ne devrais pas avoir à manuellement inser cookiedata récupérée à partir de mon navigateur plus.
Cependant, lorsque j'essaie de faire quelque chose comme ceci:
var profilePage = b.Get(@"https://m.facebook.com/profile.php?id=1111111111");
la doc je serai de retour est vide. J'aimerais avoir des commentaires sur ce que je fais mal.
source d'informationauteur Karsa Olong
Vous devez vous connecter pour publier un commentaire.
Désolé, je ne sais pas beaucoup sur le HTML agility pack ou BrowserSession classe que vous avez mentionné. Mais je l'ai fait essayer le même scénario avec Interface htmlunit et il fonctionne très bien. Je suis en utilisant un .NET wrapper (le code source de ce qui peut être trouvé ici et est expliqué un peu plus ici), et voici le code que j'ai utilisé (certains détails afin de protéger les innocents):
Espère que cette aide.
Vous pouvez utiliser WatiN (Le Test Des Applications Web .Net) Ou Selenium au volant de votre navigateur. Cela aidera assurez-vous que vous n'avez pas à jouer avec les cookies et de faire un travail à effectuer par la suite des demandes de travail puisque vous êtes la simulation réelle de l'utilisateur.
J'ai eu des symptômes similaires - connexion fonctionne mais cookie d'authentification n'était pas présent dans le cookie contenant et donc il n'a pas été envoyé sur les demandes ultérieures. J'ai trouvé que c'était parce que le web demande était de la manipulation de l'en-tête location: en interne, en redirigeant les coulisses d'une nouvelle page, de perdre les cookies dans le processus. J'ai résolu ce problème en ajoutant:
...à la OnPreRequest() fonction. Il ressemble maintenant à ceci:
J'espère que cela peut aider quelqu'un rencontre le même problème.
Aujourd'hui j'ai été confrontée au même problème. J'ai également travaillé avec Rohit Agarwal est BrowserSession classe avec HtmlAgilityPack.
Après essais et d'erreur de programmation de l'ensemble de la journée, j'ai compris que le problème est dû, en raison de ne pas le réglage de l'cookies dans la suite de la demande.
Je couln change pas la première BrowserSession code fonctionne correctement, mais j'ai ajouté les fonctions suivantes et légèrement modifié le SameCookieFrom-fonction. En fin de compte, il a travaillé bien pour moi.
L'ajoutés/modifiés fonctions sont les suivantes:
Ce qu'il fait: Il veut enregistre les cookies à partir de l'initiale de "Post-Réponse" et ajoute la même CookieContainer à la demande appelé plus tard. Je ne suis pas entièrement comprendre pourquoi ça ne fonctionnait pas dans la version initiale, car c'est en quelque sorte la même chose dans l'AddCookiesTo-fonction. (if (Cookies != null && Cookies.Count > 0) demande.CookieContainer.Ajouter(Cookies);)
De toute façon, avec ces fonctions ajoutées, il devrait fonctionner correctement maintenant.
Il peut être utilisé comme ceci:
tous les appels ultérieurs à utiliser:
J'espère que cela aide beaucoup de gens confrontés au même problème!
Avez-vous vérifié leur nouvelle API?
http://developers.facebook.com/docs/authentication/
Vous pouvez appeler un simple URL pour obtenir un oauth2.0 jeton d'accès et l'attacher sur le reste de vos demandes...
Changement redirect_uri vers n'importe quelle URL que vous voulez, et il sera appelée de retour avec un paramètre appelé "access_token". Obtenir et faire ce que automatisé d'appels du SDK que vous voulez.