我写了两个HttpWebrequest来登录并从站点获取HTML。 第一个响应的Cookies被捕获在CookieContainer中,并在第二个请求中使用。 目前,它正在捕获3个cookie。 第二个请求的响应具有找到/重定向的状态码302。 当在浏览器中打开页面并在页面上使用ctrl + u时,我可以找到充满数据的“ var login_user”。 带有第一个请求的登录看起来很有效,因为登录后它会将我重定向到指定的url,但是在其响应的HTML内容中,我可以找到“ var login_user = null”。 有人可以帮助我在第二次响应时获取statusCode OK以获取其HTML内容吗?
string loginUrl = @"https://id2.g-portal.com/login?redirect=https://www.g-portal.com/auth/login?redirectAfterLogin/https://www.g-portal.com/de/";
string logDataUrl = @"https://www.g-portal.com/server/.../logs";
CookieContainer cookieContainer = new CookieContainer();
// POST request to login
HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create(loginUrl);
loginRequest.Method = "POST";
loginRequest.KeepAlive = true;
loginRequest.ContentType = "application/x-www-form-urlencoded";
loginRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0";
loginRequest.CookieContainer = cookieContainer;
byte[] dataBytes = Encoding.UTF8.GetBytes("login=" + username + "&password=" + password);
loginRequest.ContentLength = dataBytes.Length;
using (Stream postStream = loginRequest.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
using (HttpWebResponse loginResponse = (HttpWebResponse)loginRequest.GetResponse())
{
Uri uri1 = loginResponse.ResponseUri;
var status1 = loginResponse.StatusCode; // is OK
using (StreamReader responseReader = new StreamReader(loginResponse.GetResponseStream()))
{
string loginHtmlContent = responseReader.ReadToEnd();
foreach (Cookie cookie in loginResponse.Cookies)
{
cookieContainer.Add(cookie);
}
}
}
// GET request for logs
HttpWebRequest logDataRequest = (HttpWebRequest)WebRequest.Create(logDataUrl);
logDataRequest.Method = "GET";
logDataRequest.ContentType = "application/x-www-form-urlencoded";
logDataRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0";
logDataRequest.CookieContainer = cookieContainer;
logDataRequest.AllowAutoRedirect = false;
string resultHTMLcontent = string.Empty;
using (HttpWebResponse logDataResponse = (HttpWebResponse)logDataRequest.GetResponse())
{
Uri uri2 = logDataResponse.ResponseUri;
var status2 = logDataResponse.StatusCode; // is Found
Console.WriteLine("Log data request succesfully");
using (StreamReader responseReader = new StreamReader(logDataResponse.GetResponseStream()))
{
resultHTMLcontent = responseReader.ReadToEnd(); // is empty
}
}