isGood

心中时常装有一盘人生的大棋,天作棋盘,星作棋子,在斗转星移中,只有不断地搏击人生,人生才有意义,生命才能彰显光辉,才能收获一分永恒。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#一个到多个Cookie的字符串添加到CookieCollection集合中

多个站点(Domain)与多个路径(Path)与多个Cookie名(c.name)的字符要添加到CookieCollection集合中

在网上找不到可行的方法,isGood用一天写出的添加到CookieCollection集合中多用代码:

/// <summary>
/// 一个到多个Cookie的字符串添加到CookieCollection集合中【isGood代码】
/// </summary>
/// <param name="s">Cookie的字符串</param>
/// <param name="defaultDomain">站点主机部分</param>
public static CookieCollection strCokAddCol(string s, string defaultDomain)
{
	CookieCollection cc = new CookieCollection();
	if (string.IsNullOrEmpty(s) || s.Length < 5 || s.IndexOf("=") < 0) return cc;
	if (string.IsNullOrEmpty(defaultDomain) || defaultDomain.Length < 5) return cc;
	s.TrimEnd(new char[] { ';'}).Trim();
	Uri urI = new Uri(defaultDomain);
	defaultDomain = urI.Host.ToString();
        //用软件截取的cookie会带有expires,要把它替换掉【isGood代码】
	if (s.IndexOf("expires=") >= 0)
	{
		s = replace(s, @"expires=[\w\s,-:]*GMT[;]?", "");
	}
       //只有一个cookie直接添加【isGood代码】
	if (s.IndexOf(";") < 0)
	{
		System.Net.Cookie c = new System.Net.Cookie(s.Substring(0, s.IndexOf("=")), s.Substring(s.IndexOf("=") + 1));
		c.Domain = defaultDomain;
		cc.Add(c);
		return cc;
	}
    //不同站点与不同路径一般是以英文道号分别【isGood代码】
	if (s.IndexOf(",") > 0)
	{
		s.TrimEnd(new char[] { ',' }).Trim();
		foreach (string s2 in s.Split(','))
		{
			cc = strCokAddCol(s2, defaultDomain, cc);
		}
		return cc;
	}
	else //同站点与同路径,不同.Name与.Value【isGood代码】
	{
		return strCokAddCol(s, defaultDomain, cc);
	}
}

//添加到CookieCollection集合部分

private static CookieCollection strCokAddCol(string s, string defaultDomain, CookieCollection cc)
{
	try
	{
		s.TrimEnd(new char[] { ';' }).Trim();
		System.Collections.Hashtable hs = new System.Collections.Hashtable();
		foreach (string s2 in s.Split(';'))
		{
			string s3 = s2.Trim();
			if (s3.IndexOf("=") > 0)
			{
				string[] s4 = s3.Split('=');
				hs.Add(s4[0].Trim(), s4[1].Trim());
			}
		}
		string defaultPath = "/";
		foreach (object Key in hs.Keys)
		{
			if (Key.ToString().ToLower() == "path")
			{
				defaultPath = hs[Key].ToString();
			}
			else if (Key.ToString().ToLower() == "domain")
			{
				defaultDomain = hs[Key].ToString();
			}
		}
//【isGood代码】
		foreach (object Key in hs.Keys)
		{
			if (!string.IsNullOrEmpty(Key.ToString()) && !string.IsNullOrEmpty(hs[Key].ToString()))
			{
				if (Key.ToString().ToLower() != "path" && Key.ToString().ToLower() != "domain")
				{
					Cookie c = new Cookie();
					c.Name = Key.ToString();
					c.Value = hs[Key].ToString();
					c.Path = defaultPath;
					c.Domain = defaultDomain;
					cc.Add(c);
				}
			}
		}
	}
	catch {}
	return cc;
}

 

替换字符 

/// <summary>
/// 替换字符【isGood代码】
/// </summary>
/// <param name="strSource">来源</param>
/// <param name="strRegex">表达式</param>
/// <param name="strReplace">取代</param>
public static string replace(string strSource, string strRegex, string strReplace)
{
	try
	{
		Regex r;
		r = new Regex(strRegex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
		string s = r.Replace(strSource, strReplace);
		return s;
	}
	catch
	{
		return strSource;
	}
}

 【isGood代码】