c#屏幕抓取和获取所有cookies以安全访问网站
我正试图通过c#程序访问一个网站。访问该网站似乎需要三个cookie,但我的cookie容器中只收到两个cookie,因此当我尝试访问网站的其他部分时,我无法访问。我先做一个“获取”然后再做一个“发布”。我之所以这样编程,是因为从Chrome开发工具来看,我确定它首先使用GET作为前两个,然后使用POST登录并获取第三个。这篇文章显示了一个302被临时移动,然后紧接着是一个重定向。我相信这就是我不能得到最后一块饼干的原因有人能解释一下吗c#屏幕抓取和获取所有cookies以安全访问网站,c#,cookies,httpwebrequest,httpresponse,C#,Cookies,Httpwebrequest,Httpresponse,我正试图通过c#程序访问一个网站。访问该网站似乎需要三个cookie,但我的cookie容器中只收到两个cookie,因此当我尝试访问网站的其他部分时,我无法访问。我先做一个“获取”然后再做一个“发布”。我之所以这样编程,是因为从Chrome开发工具来看,我确定它首先使用GET作为前两个,然后使用POST登录并获取第三个。这篇文章显示了一个302被临时移动,然后紧接着是一个重定向。我相信这就是我不能得到最后一块饼干的原因有人能解释一下吗 cookieJar =
cookieJar = new CookieContainer();
string formParams = string.Format("USERNAME={0}&PASSWORD={1}", username, password);
Console.Write(" \n 1st count before anything : " + cookieJar.Count + "\n"); // 0 cookies
//First go to the login page to obtain cookies
HttpWebRequest loginRequest = (HttpWebRequest)HttpWebRequest.Create("https://server.com/login/login.jsp");
loginRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
//.Connection = "keep-alive";
loginRequest.Method = "GET";
loginRequest.UseDefaultCredentials = true;
loginRequest.CookieContainer = cookieJar;
loginRequest.AllowAutoRedirect = false;
HttpWebResponse loginResponse = (HttpWebResponse)loginRequest.GetResponse();
Console.Write(" \n 2nd count after first response : " + cookieJar.Count + "\n"); // Only 2 are recorded.
//Create another request to actually log into website
HttpWebRequest doLogin = (HttpWebRequest)HttpWebRequest.Create("https://server.com/login/login.jsp");
doLogin.Method = "POST";
doLogin.ContentType = "application/x-www-form-urlencoded";
doLogin.AllowAutoRedirect = false;
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
doLogin.ContentLength = bytes.Length;
using (Stream os = doLogin.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
oLogin.CookieContainer = cookieJar;
doLogin.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36";
doLogin.Referer = "https://server.com/login/login.jsp";
HttpWebResponse Response = (HttpWebResponse)doLogin.GetResponse();
Console.Write(“\n第二次重复后的第三次计数:“+cookieJar.count+”\n”);//还有两个HttpWebRequest与Cookie有问题 问题是分配给“server.com”的cookie将更改为“.server.com”。但是,“server.com”与“.server.com”不匹配 如果您使用的框架比(我认为是3)旧,那么您可能遇到了这个问题
解决方法是在您的请求中使用例如“www.server.com”,这将匹配分配给“.server.com”的Cookie。我也一直在为一些其他事情与此进行斗争。您可能需要将从响应中获得的cookie实际添加到cookie对象。添加(loginResponse.Cookies);谢谢好心的先生的回复!唉,不是这样。即使我执行Console.Write(Response.Headers)操作,它也只会在Set Cookie头中回复两个Cookie。我还是尝试过你的解决方案,但没有任何效果。这是如此令人困惑(感谢您的回复!我实际上是在framework 4上。但是我还是尝试了,但是我无法使用它,因为如果我将www.添加到前端,我无法与服务器通信。是否有其他方法确定这是否是问题(源链接?)。如果这真的是问题所在,我需要一种完全不同的方法……在框架4中这应该不是问题。我在上千个不同的网站上一直使用它。我建议你使用Fiddler2来确定你到底在请求什么以及得到什么样的响应。谢谢你提供的fiddler提示。我已经解决了。:)