将登录请求发布到网站以在C#中抓取数据

时间:2019-06-27 13:45:53

标签: c# http-post

我想使用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。

0 个答案:

没有答案