登录后如何使用C#从网页接收完整的cookie信息

时间:2020-10-04 18:20:41

标签: c# authentication cookies httpwebrequest

我尝试使用C#以编程方式登录到网页“ https://www.tagesanzeiger.ch/”

使用我的代码,我得到一个响应结果 {“状态”:“确定”,“登录证”:“ LT-8oVvgYB9PmMXGZkU7uhSy0iDwHQan”}

我在响应中有一个cookie,其中包含以下信息: Cookie名称:creid Cookie域:.tagesanzeiger.ch Cookie 1679645547384920719

不幸的是,cookie信息1-tx_user_status是匿名的,而2 tx_sub_status却没有被保留。 enter image description here

使用浏览器登录时,cookie设置如下:

enter image description here

我的代码如下所示(https://rextester.com/edit/ZPVH43356的主要来源-已修改为我的需要):

            //https://rextester.com/edit/ZPVH43356
            try
            {
                CookieCollection cookieCollection;

                CookieContainer cookieContainer = new CookieContainer();
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.tagesanzeiger.ch/kinder-stecken-sich-gleich-haeufig-an-wie-erwachsene-689873876503");
                request.CookieContainer = cookieContainer;
                //SET AUTOMATIC DECOMPRESSION
                request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

                //set the user agent and accept header values, to simulate a real web browser
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
                Console.WriteLine("FIRST RESPONSE");
                Console.WriteLine();
                using (WebResponse response = request.GetResponse())
                {
                    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                    {
                        Console.WriteLine(sr.ReadToEnd());
                    }
                }

                request = (HttpWebRequest)HttpWebRequest.Create("https://login.tagesanzeiger.ch/api/user/loginticket?callerUri=http://www.tagesanzeiger.ch/ein-kranker-praesident-und-sein-kraenkelndes-land-132877108036&referrer=https%3A%2F%2Fwww.tagesanzeiger.ch%2Fein-kranker-praesident-und-sein-kraenkelndes-land-132877108036");
                request.CookieContainer = cookieContainer;
                request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                //set method POST and content type application/x-www-form-urlencoded
                request.Method = "POST";
                request.ContentType = "application/json";
                //request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36";
                //set the cookie container object
                //request.Accept = "*/*";
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";

                request.Headers.Add("Origin", "https://login.tagesanzeiger.ch");
                request.Headers.Add("Sec-Fetch-Site", "same-origin");
                request.Headers.Add("Sec-Fetch-Mode", "cors");
                request.Headers.Add("Sec-Fetch-Dest", "empty");
                //request.Referer = "https://login.tagesanzeiger.ch/";
                request.Referer = "https://login.tagesanzeiger.ch/?callerUri=http://www.tagesanzeiger.ch/ein-kranker-praesident-und-sein-kraenkelndes-land-132877108036&referrer=https%3A%2F%2Fwww.tagesanzeiger.ch%2Fein-kranker-praesident-und-sein-kraenkelndes-land-132877108036";
                request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br");
                request.Headers.Set(HttpRequestHeader.AcceptLanguage, "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7");
                request.ServicePoint.Expect100Continue = false;

                request.AllowAutoRedirect = false;

                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                    string json = "{\"login\":\"username\"," + "\"password\":\"password"," + "\"serviceId\":\"tagesanzeiger\"}";

                    streamWriter.Write(json);
                    streamWriter.Flush();
                    streamWriter.Close();
                }

                Console.WriteLine("LOGIN RESPONSE");
                Console.WriteLine();

                HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

                if (resp.Cookies.Count > 0)
                    cookieCollection = resp.Cookies;

                foreach (Cookie cookie in resp.Cookies)
                {
                    //cookieContainer.Add(cookie);
                    Console.WriteLine("Cookie Name: {0}", cookie.Name);
                    Console.WriteLine("Cookie Domain: {0}", cookie.Domain);
                    Console.WriteLine("Cookie {0}", cookie.Value);
                    Console.WriteLine("Cookie {0}", cookie.Comment);
                }

                using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
                {
                    Console.WriteLine(sr.ReadToEnd());
                }




                request = (HttpWebRequest)HttpWebRequest.Create("https://www.tagesanzeiger.ch/kinder-stecken-sich-gleich-haeufig-an-wie-erwachsene-689873876503");


                //After a successful login, you must use the same cookie container for all request
                request.CookieContainer = cookieContainer;

                using (WebResponse response = request.GetResponse())
                {
                    using (StreamReader sr2 = new StreamReader(response.GetResponseStream()))
                    {
                        Console.WriteLine(sr2.ReadToEnd());
                    }
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

我认为通过在请求中包含cookiecontainer,它将在成功登录到下一个请求后移交。 但是看来我从登录请求中收到的cookie尚未完成。

有人真的知道我是否真的登录过吗,以及如何使用已登录的信息访问页面?

0 个答案:

没有答案
相关问题