Я разрабатываю приложение, которое извлекает данные из Интернета и анализирует его с помощью 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
для дальнейших запросов, и я вошел в систему через все это.
Спасибо всем за вашу помощь!