Comment passer des cookies pour HtmlAgilityPack ou WebClient?
J'utilise ce code pour vous connecter:
CookieCollection cookies = new CookieCollection();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("example.com");
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
cookies = response.Cookies;
string getUrl = "example.com";
string postData = String.Format("my parameters");
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl);
getRequest.CookieContainer = new CookieContainer();
getRequest.CookieContainer.Add(cookies);
getRequest.Method = WebRequestMethods.Http.Post;
getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0";
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();
newStream.Write(byteArray, 0, byteArray.Length);
newStream.Close();
HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream(), Encoding.GetEncoding("windows-1251")))
{
doc.LoadHtml(sr.ReadToEnd());
webBrowser1.DocumentText = doc.DocumentNode.OuterHtml;
}
alors je veux utiliser HtmlWeb (HtmlAgilityPack) ou Webclient pour analyser le code HTML de HtmlDocument(HtmlAgilityPack).
Mon problème est que lorsque j'utilise:
WebClient wc = new WebClient();
webBrowser1.DocumentText = wc.DownloadString(site);
ou
doc = web.Load(site);
webBrowser1.DocumentText = doc.DocumentNode.OuterHtml;
La connexion disparaissent donc je pense que je dois en quelque sorte passer les cookies.. des suggestions?
OriginalL'auteur a1204773 | 2013-03-04
Vous devez vous connecter pour publier un commentaire.
Vérifier HtmlAgilityPack.HtmlDocument Cookies
Voici un exemple de ce que vous êtes à la recherche pour (syntaxe n'est pas à 100% testé, j'ai juste modifié un peu de classe que j'utilise habituellement):
Ici est de savoir comment vous l'utilisez:
Remarque: Si vous souhaitez également utiliser
POST
méthode, il suffit de créer une méthode similaire àGetPage
avec lePOST
logique, refactoriser la classe, etc.OriginalL'auteur Oscar Mederos
Il y a quelques recommandations ici: À l'aide de CookieContainer avec classe WebClient
Cependant, il est probablement plus facile de le maintenir à l'aide de la
HttpWebRequest
et définir le cookie dans leCookieContainer
:Le code ressemble à ceci:
La deuxième chose, c'est que vous n'avez pas besoin de télécharger de nouveau le site, car vous disposez déjà de votre réponse web et vous êtes en train d'enregistrer ici:
Vous devriez être en mesure de prendre juste le HTML et analyser le code HTML Agility Pack:
Et qui devrait le faire... 🙂
Vous devez continuer à fournir les cookies à chaque demande que vous faites. Si vous ne fournissez pas les cookies à chaque requête, alors il va supposer que vous vous êtes connecté (la plupart des informations de connexion contenues dans le cookie).
pour faire la connexion j'utilise
login();
fonction, pourriez-vous svp m'aider à fairegetHTML(url);
fonction de la cause de votre code ci-dessus n'est pas complète.j'ai essayé de compléter votre code mais encore, elle me demande de me connecter
OK,
login();
n'est pas un C# fonction et il n'est nigetHTML
, donc je ne peux pas beaucoup vous aider. Le code que je vous montre est censé pour vous aider à comprendre comment inclure un cookie avec votreHttpWebRequest
(doit être tout ce que vous devez faire toutes vos demandes pour du contenu HTML à partir d'une page). Etant donné que le code que vous avez indiqué dans votre question et celle que je vais les montrer à ma réponse, où, exactement, est le problème? Vous devez me fournir des informations utiles, il suffit de dire "j'ai essayé de compléter votre code mais encore, elle me demande de me connecter" ne m'en dit pas beaucoup.OriginalL'auteur Kiril
Essayer de cache de cookies de réponse précédente localement et de leur renvoyer chaque requête web comme suit:
OriginalL'auteur Vasile