Cómo autenticar permanentemente usando Restsharp

authentication c# html-agility-pack rest restsharp

Pregunta

Estoy desarrollando una aplicación que extrae datos de la web y los analiza utilizando HtmlAgilityPack. Sin embargo, no es tan sencillo, se requiere inicio de sesión para acceder a los datos.

Estoy usando Restsharp para autenticarme así:

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

Esto funciona perfectamente pero el problema es que no puedo iniciar sesión de manera permanente, no puedo realizar otra solicitud usando esta clase de instancia de RestRequest, da el error de que no estoy conectado. He encontrado una solución alternativa pero no No trabajo con algunas páginas, básicamente, coloco la url en el campo de referer , pero tengo que realizar la solicitud cada vez que navego a otra página y esto es un inconveniente.

¿Cómo inicio sesión de forma permanente, para poder realizar una nueva solicitud desde la misma instancia?

¡Gracias!

Respuesta popular

Después de algunas investigaciones, encontré que la respuesta es cookies. Cada vez que se realiza una solicitud, la respuesta tiene cookies. Usé las galletas de esta manera.

Después de response = client.Execute(request) esto:

        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

Esto no crea una nueva instancia, pero utiliza la misma request para realizar más solicitudes y estoy conectado a través de todo.

¡Gracias a todos por su ayuda!



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow