Comment s'authentifier de façon permanente en utilisant Restsharp

authentication c# html-agility-pack rest restsharp

Question

Je développe une application qui extrait les données du Web et les analyse à l'aide de HtmlAgilityPack. Cependant, ce n'est pas si simple, une connexion est nécessaire pour accéder aux données.

J'utilise Restsharp pour m'authentifier comme ceci:

        //class definitions 
        request = new RestRequest("http://allpoetry.com/login", Method.POST);
        request.AddParameter("utf8", "%E2%9C%93");
        request.AddParameter("authenticity_token", "Lr+JtLv7TkZrS73u5scRPbWhuUYDaVF7vd6lkKFF3FKYqNKHircT9v5WCT9EkneTJRsKXaA6nf6fiWopDB0INw==");
        request.AddParameter("referer", url);  // url to the page I want to go
        request.AddParameter("user[name]", "username");
        request.AddParameter("user[password]", "password");
        request.AddParameter("commit", "Log in");
        request.AddHeader("content-type", "application/x-www-form-urlencoded");
        response = client.Execute(request);

Cela fonctionne parfaitement, mais le problème est que je ne peux pas me connecter en permanence, je ne peux pas faire une autre requête en utilisant cette instance de la classe RestRequest, cela donne l'erreur Ne travaillez pas avec certaines pages, je mets l’ url dans le champ referer , mais je dois faire une demande chaque fois que je navigue sur une autre page, ce qui est peu pratique.

Comment puis-je me connecter en permanence pour pouvoir faire une nouvelle demande à partir de la même instance?

Je vous remercie!

Réponse populaire

Après quelques recherches, j'ai trouvé que la réponse était les cookies. Chaque fois qu'une demande est faite, la réponse contient des cookies. J'ai utilisé les cookies comme ça.

Après la response = client.Execute(request) j'ai ajouté ceci:

        request.Resource = url;
        request.Method = Method.GET;
        foreach (var cookie in response.Cookies)
        {
            request.AddCookie(cookie.Name , cookie.Value);  //this adds every cookie in the previous response.
        }
        response = client.Execute(request);
       //use the response as required

Cela ne crée pas une nouvelle instance mais utilise la même request pour faire d'autres demandes et je suis connecté à travers tout cela.

Merci à tous pour votre aide!



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow