Пример #1
0
        /// <summary>
        /// 采用httpwebrequest方式访问网络,根据传入的URl地址,得到响应的数据字符串。
        /// </summary>
        /// <param name="objHttpItems">参数列表</param>
        /// <param name="cookie">自动维护的字符串cookie</param>
        /// <returns>HttpResults 为返回结果</returns>
        public HttpResults GetHtml(HttpItems objHttpItems, ref string cookie)
        {
            //调用专门读取数据的类
            HttpResults res = GetHttpRequestData(objHttpItems);

            cookie     = new XJHTTP().UpdateCookie(cookie, res.Cookie);
            res.Cookie = cookie;
            return(res);
        }
Пример #2
0
        /// <summary>
        /// 【不推荐使用】 推荐使用字符串方式维护Cookie
        /// 将StringCookie 添加到 CookieContainer对象中
        /// 当CookieContainer出现问题时请调用本方法修复 CookieContainer对象
        /// 更新失败时,返回原来的CookieContainer对象
        ///
        /// </summary>
        /// <param name="cookie_container">需要更新的cookie_container</param>
        /// <param name="cookie">字符串cookie</param>
        /// <param name="domain">domain默认为空</param>
        /// <returns></returns>
        public CookieContainer AddCookieToContainer(CookieContainer cookie_container, string cookie, string domain = "")
        {
            if (cookie_container == null)
            {
                cookie_container = new CookieContainer();
            }
            Regex  reg     = new Regex("domain=(.*?);");
            string rdomain = string.Empty;

            if (reg.IsMatch(cookie))
            {
                rdomain = reg.Match(cookie).Groups[1].Value;
            }
            else
            {
                // 有指定域名就用指定的
                if (domain.Length > 0)
                {
                    rdomain = domain;
                }//匹配失败 如果cookie_container中的数据为0那么直接返回,本次更新失败
                else if (cookie_container.Count > 0)
                {
                    try
                    {
                        rdomain = new XJHTTP().GetAllCookie(cookie_container)[0].Domain; //得到原cookie_container中的domain.  如果失败,则返回原先对象
                    }
                    catch
                    {
                        return(cookie_container);
                    }
                }
            }
            string[] arrCookie = cookie.Split(';');
            foreach (string sCookie in arrCookie)
            {
                string vsCookie = sCookie.Replace("HttpOnly,", "").Trim(); //剔除httponly
                if (vsCookie.Contains("expires"))                          //去除过滤时间
                {
                    continue;
                }
                if (vsCookie.Split(',').Length > 1) //去掉,分隔的cookie
                {
                    vsCookie = vsCookie.Split(',')[1];
                }
                try
                {
                    if (!string.IsNullOrEmpty(vsCookie))
                    {
                        Cookie ck = new Cookie
                        {
                            Name   = vsCookie.Split(new Char[] { '=' }, 2)[0].Trim(),
                            Value  = vsCookie.Split(new Char[] { '=' }, 2)[1].Trim(),
                            Domain = rdomain
                        };
                        cookie_container.Add(ck);
                    }
                }
                catch
                {
                    continue;
                }
            }
            return(cookie_container);
        }