关于 Cookie 创建方法的差异

今天在采集某个网站的时候,需要对 Cookie 进行验证,然后我就用 Cookie 类建立了几个 Cookie 信息,结果发送过去后,认证失败


         private CookieCollection _cookies = new CookieCollection();

        public void SetCookie(string key, string value, string domain = "", Uri commenturi = null)
        {
            Cookie cookie = new Cookie(key, value);
            cookie.Expires = DateTime.Now.AddDays(1);
            if (domain.Length > 0)
            {
                cookie.Domain = domain;
            }
            if (commenturi != null)
            {
                cookie.CommentUri = commenturi;
                cookie.Domain = commenturi.Host;
                //cookie.Port = commenturi.Port.ToString();
            }
            _cookies.Add(cookie);
        }

        public void main(){
             SetCookie("testKey","testValue","www.test.com");
             HttpWebRequest http = (HttpWebRequest)WebRequest.Create(full_url);
             http.CookieContainer = new CookieContainer();
            if (_cookies.Count > 0)
            {
                http.CookieContainer.Add(_cookies);
            }
              
        }

经过仔细观察,发现 http.CookieContainer 里的私有变量中 DomainTable 有两个数据,其中一个是从网站上获取的,Domain 就是 www.test.com,而另一组是我伪造的, Domain 是 .www.test.com

从 MSDN 上查询后,发现 new Cookie 方法建立的信息,无法正确的将 Domain 验证进去,由此方法建立的内容,私有变量中 DomainKey 的值始终为空,无法正常使用

后来发现,可以使用另外一种方法建立 Cookie ,可以直接带有 DomainKey 的值

        public void SetCookie(Uri uri, string key, string value)
        {
            CookieContainer cc = new CookieContainer();
            cc.Add(uri, new Cookie(key, value));
            foreach (Cookie cookie in cc.GetCookies(uri))
            {
                _cookies.Add(cookie);
            }
        }

直接使用 CookieContainer 类的 Add 方法,可以将 Cookie 的 Domain 信息正确的设置,经测试运行正常,可以正确的采集到预期信息。。。。


郁闷啊,就这么点差异,居然让我查了好几个小时的资料。。。。。

你可能感兴趣的:(C#,HttpWebRequest)