Come autenticare in modo permanente usando Restsharp

authentication c# html-agility-pack rest restsharp

Domanda

Sto sviluppando un'applicazione che estrae i dati dal web e li analizza utilizzando HtmlAgilityPack. Tuttavia, non è così semplice, è necessario il login per accedere ai dati.

Sto usando Restsharp per autenticare in questo modo:

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

Funziona perfettamente ma il problema è che non riesco ad accedere in modo permanente, non posso fare un'altra richiesta usando questa istanza della classe RestRequest, dà l'errore che non sono loggato. Ho trovato un work-around ma doesn funziona con alcune pagine, in pratica metto l' url nel campo referer , ma devo fare richiesta ogni volta che navigo verso un'altra pagina e questo è scomodo.

Come posso accedere in modo permanente, in modo da poter fare nuove richieste dalla stessa istanza?

Grazie!

Risposta popolare

Dopo alcune ricerche, ho scoperto che la risposta è biscotti. Ogni volta che viene effettuata una richiesta, la risposta ha i cookie. Ho usato i cookie in questo modo.

Dopo la response = client.Execute(request) ho aggiunto questo:

        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

Questo non crea una nuova istanza ma usa la stessa request per fare ulteriori richieste e io sono loggato attraverso tutto questo.

Grazie a tutti per il vostro aiuto!



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché