웹에서 데이터를 가져 와서 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 클래스의이 인스턴스를 사용하여 다른 요청을 할 수 없으며 로그인하지 않은 오류가 발생합니다. 해결 방법을 찾았지만 doesn은 아닙니다. 일부 페이지에서는 기본적으로 url
을 referer
필드에 넣지 만 다른 페이지로 이동할 때마다 요청해야하며 불편합니다.
영구 로그인을하면 동일한 인스턴스에서 새로운 요청을 할 수 있습니까?
고맙습니다!
약간의 연구 끝에, 나는 대답이 쿠키라는 것을 발견했다. 요청이있을 때마다 응답에 쿠키가 있습니다. 이런 쿠키를 사용했습니다.
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
을 사용하여 추가 요청을하고 그걸 통해 모두 로그인했습니다.
도움을 주신 모든 분들께 감사드립니다!