我尝试使用C#以编程方式登录到网页“ https://www.tagesanzeiger.ch/”
使用我的代码,我得到一个响应结果 {“状态”:“确定”,“登录证”:“ LT-8oVvgYB9PmMXGZkU7uhSy0iDwHQan”}
我在响应中有一个cookie,其中包含以下信息: Cookie名称:creid Cookie域:.tagesanzeiger.ch Cookie 1679645547384920719
不幸的是,cookie信息1-tx_user_status是匿名的,而2 tx_sub_status却没有被保留。
使用浏览器登录时,cookie设置如下:
我的代码如下所示(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尚未完成。
有人真的知道我是否真的登录过吗,以及如何使用已登录的信息访问页面?