c#屏幕抓取和获取所有cookies以安全访问网站

c#屏幕抓取和获取所有cookies以安全访问网站,c#,cookies,httpwebrequest,httpresponse,C#,Cookies,Httpwebrequest,Httpresponse,我正试图通过c#程序访问一个网站。访问该网站似乎需要三个cookie,但我的cookie容器中只收到两个cookie,因此当我尝试访问网站的其他部分时,我无法访问。我先做一个“获取”然后再做一个“发布”。我之所以这样编程,是因为从Chrome开发工具来看,我确定它首先使用GET作为前两个,然后使用POST登录并获取第三个。这篇文章显示了一个302被临时移动,然后紧接着是一个重定向。我相信这就是我不能得到最后一块饼干的原因有人能解释一下吗 cookieJar =

我正试图通过c#程序访问一个网站。访问该网站似乎需要三个cookie,但我的cookie容器中只收到两个cookie,因此当我尝试访问网站的其他部分时,我无法访问。我先做一个“获取”然后再做一个“发布”。我之所以这样编程,是因为从Chrome开发工具来看,我确定它首先使用GET作为前两个,然后使用POST登录并获取第三个。这篇文章显示了一个302被临时移动,然后紧接着是一个重定向。我相信这就是我不能得到最后一块饼干的原因有人能解释一下吗

                 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提示。我已经解决了。:)