2

我正在尝试通过 c# 程序访问网站。访问该网站似乎需要三个 cookie,但我的 cookie 容器中只收到两个,所以当我尝试访问网站的其他部分时,我无法访问。我先做一个 GET 然后是一个 POST。我以这种方式编写它的原因是因为从 Chrome 开发工具看来,我确定它首先对前两个使用 GET,然后使用 POST 登录并获取第三个。POST 显示 302 Moved Temporarily,然后是重定向。我相信这是我无法获得最后一块饼干的原因,任何人都可以解释一下吗?

                 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"); //还是两个

4

1 回答 1

0

HttpWebRequest 的 cookie 有问题。

问题是分配给“server.com”的 cookie 将更改为“.server.com”。但是,“server.com”与“.server.com”不匹配。

如果您使用的框架早于(我认为是 3),您可能会遇到这个问题。

解决方法是在您的请求中使用例如“www.server.com”,这将匹配分配给“.server.com”的cookie。

于 2013-06-18T19:41:52.657 回答