Как аутентифицироваться на постоянной основе с помощью Restsharp

authentication c# html-agility-pack rest restsharp

Вопрос

Я разрабатываю приложение, которое извлекает данные из Интернета и анализирует его с помощью HtmlAgilityPack. Однако для доступа к данным требуется не прямолинейный вход, а вход.

Я использую Restsharp для аутентификации следующим образом:

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

Это работает отлично, но проблема в том, что я не могу войти в систему навсегда, я не могу сделать другой запрос, используя этот экземпляр класса RestRequest, он дает ошибку, что я не вошел в систему. Я нашел работу, но это не так. Не работайте с некоторыми страницами, в основном я помещаю url в поле referer но я должен делать запрос каждый раз, когда перехожу на другую страницу, и это неудобно.

Как я могу войти в систему навсегда, так что я могу сделать новый запрос из того же экземпляра?

Спасибо!

Популярные ответы

После некоторых исследований я обнаружил, что ответ - это файлы cookie. Каждый раз, когда запрос делается, в ответе есть файлы cookie. Я использовал такие куки.

После response = client.Execute(request) Я добавил следующее:

        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

Это не создает новый экземпляр, но использует тот же request для дальнейших запросов, и я вошел в систему через все это.

Спасибо всем за вашу помощь!



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow