C#一个到多个Cookie的字符串添加到CookieCollection集合中【isGood代码】
浏览量:7104
	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;
	}
	}
	oa开发,erp crm定制找易势

