http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3261|回复: 1

[其他] 关于Cookie的存储问题

[复制链接]
发表于 2013-4-10 16:42:10 | 显示全部楼层 |阅读模式
我有一个想法,就是建一个静态的哈希表用来存储Cookie,以网站的域名为键,然后值为另一个子哈希表,以cookie的字段名称为键,以它的值为子哈希表的值。
在用HttpHelper类的对象访问一个网站之前检查cookie哈希表里是否已经有这个网站的cookie信息,如果用就在访问这个网站之前把它对应的cookie值给HttpHelper,最后在完成访问后,再把HttpHelper的cookies存储到那个静态的哈希表中

下面是我写的用来存储cookie的哈希表现实代码,问题的问题是我不知道这些访问应该加到HttpHelper中的哪个位置去

[code=csharp]public static Hashtable CookieList = new Hashtable();//用来存储cookie的哈希表

/// <summary>
        /// 返回指定网站的cookies
        /// </summary>
        /// <param name="cookieDomain">Cookie所属网站</param>
        /// <returns>CookieContainer</returns>
        public static CookieContainer GetCookieContainer(string cookieDomain)
        {
            CookieContainer myCookieContainer = new CookieContainer();
            if (CookieList.ContainsKey(cookieDomain))
            {
                Hashtable Hash = (Hashtable) CookieList[cookieDomain];
                foreach(DictionaryEntry temCookie in Hash){
                    Cookie ck = new Cookie(temCookie.Key.ToString(), temCookie.Value.ToString());
                    ck.Domain = cookieDomain;
                    myCookieContainer.Add(ck);
                }
            }
            return myCookieContainer;
        }

        /// <summary>
        /// 设置指定网站的cookies
        /// </summary>
        /// <param name="cookieDomain">Cookie所属网站</param>
        /// <param name="cookies">Cookie值</param>
        public static void SetCookie(string cookieDomain, string cookies)
        {
            Hashtable Hash;
            if (CookieList.ContainsKey(cookieDomain))
            {
                Hash = (Hashtable)CookieList[cookieDomain];
                string[] cookstr = cookies.Split(';');
                foreach (string str in cookstr)
                {
                    string[] cookieNameValue = str.Split('=');
                    if (!Hash.ContainsKey(cookieNameValue[0].Trim().ToString()))
                    {
                        Hash.Add(cookieNameValue[0].Trim().ToString(), cookieNameValue[1].Trim().ToString());
                    }
                    else
                    {
                        Hash[cookieNameValue[0].Trim().ToString()] = cookieNameValue[1].Trim().ToString();
                    }
                }
            }
            else
            {
                Hash = new Hashtable();
                string[] cookstr = cookies.Split(';');
                foreach (string str in cookstr)
                {
                    string[] cookieNameValue = str.Split('=');
                    Hash.Add(cookieNameValue[0].Trim().ToString(), cookieNameValue[1].Trim().ToString());
                }
            }
        }

        /// <summary>
        /// 删除指定网站的cookies
        /// </summary>
        /// <param name="cookieDomain">Cookie所属网站</param>
        public static void DeLCookie(string cookieDomain)
        {
            if (CookieList.ContainsKey(cookieDomain))
            {
                CookieList.Remove(cookieDomain);
            }
        }[/code]


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-4-10 21:16:52 | 显示全部楼层
从我类的原理上来说你只要看下面代码,根据情况添加就行了
[code=csharp]
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://www.sufeinet.com",//URL     必需项
                Cookie = "这里是设置Cookie",//字符串Cookie     可选项
              
            };
           
            //得到HTML代码
            HttpResult result = http.GetHtml(item);
         
           string cookie = result.Cookie;//这里是获取后的Cookie[/code]
当然如果你是想修改Httphelper类的源码的话可以在这里修改
[code=csharp] using (response = (HttpWebResponse)request.GetResponse())
                {[/code]
这一句之前写添加Cookie
之后就获取到新的Cookie了,你可以添加到哈希表里。

不过我提示楼主不要修改我的类,如果你不是太懂的情况下,因为你修改之后就不能再升级了,再次升级需要你手动进行相应修改才行。建议你使用我第一种方法,在使用中进行添加。

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-25 04:16

© 2014-2021

快速回复 返回顶部 返回列表