我想使用C#登录学校的网站以抓取一些数据,但是我不确定该怎么做。网址:https://www.lectio.dk/lectio/31/default.aspx(“登录”将带您进入登录屏幕)。
因此,我已经尝试了很多东西,但是我的理解是,我应该首先执行GET来存储一些cookie,以最终保存包含登录信息的POST。 POST完成后,我的HTTPClient应该能够发出http请求以获取信息。我不确定我是否正确理解/执行了它。这是我的代码。
var baseAdress = new Uri("https://www.lectio.dk/lectio/31/");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer, UseCookies = true})
using (var client = new HttpClient(handler) { BaseAddress = baseAdress })
{
var homePageResult = client.GetAsync("login.aspx");
homePageResult.Result.EnsureSuccessStatusCode();
var content = new FormUrlEncodedContent(new[]
{
//information hidden for privacy reasons
new KeyValuePair<string, string>("m%24Content%24username2","username"),
new KeyValuePair<string,string>("m%24Content%24passwordHidden", "password"),
});
var loginResult = client.PostAsync("login.aspx", content).Result;
loginResult.EnsureSuccessStatusCode();
//'forside' means frontpage in danish
Stream responseStream = client.GetStreamAsync("forside.aspx").Result;
using(StreamReader reader = new StreamReader(responseStream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
我期望看到实际的https://www.lectio.dk/lectio/31/forside.aspx的响应,只能通过登录才能访问它,但是POST似乎无法登录,因此我只能从/获得响应login.aspx。