日期:2014-05-17  浏览次数:20905 次

用WebRequest获取Cookies
请问,怎么获取这个URL的Cookies呢?http://www.gdhzcgs.com/images/again_button.gif

------解决方案--------------------
#region Cookies解析
/// <summary>
/// 把服务器返回的Set-Cookie标头信息翻译成
/// <para>能放在Cookie标头上的信息</para>
/// </summary>
/// <param name="CookieStr">Set-Cookie标头信息</param>
/// <returns></returns>
public string ParseSetCookie(string CookieStr)
{
if (CookieStr.Contains("=") && CookieStr.Contains(";"))//合法性验证
{
string[] oneCookie = CookieStr.Split(';');
string returnmsg = "";
string onename = "";
foreach (string one in oneCookie)
{
string ifThereisAComment = one;
if (ifThereisAComment.StartsWith(","))
{
//修复一个Bug:如果一个标头上只有一个Cookie,则解析出来的相应值之前会多一个逗号。
ifThereisAComment=ifThereisAComment.Substring(1);//截掉开头的逗号
}
onename = ParseOneNameAndValue(ifThereisAComment);//判断是否有逗号
returnmsg += onename;
}

return returnmsg;
}
else
{
return "";
}
}

/// <summary>
/// 从数组中查找指定的值,并返回其Index
/// </summary>
/// <param name="Value">查找什么?</param>
/// <param name="Source">在哪个数组中找?</param>
/// <returns>Index或-1</returns>
public int FindIndex(string Value,string[] Source)
{
for (int i = 0; i < Source.Length; i++)
{
if (Value == Source[i])
{
return i;
}
}
return -1;
}

/// <summary>
/// 判断一个Name=Value的值是不是一个真正的Cookies
/// <para>若是两个Cookies,则把两个Cookies用分号隔开;</para>
/// <para>不是,则返回输入的NameAndValue值。</para>
/// </summary>
/// <param name="NameAndValue">Cookies Name=Value</param>
/// <returns></returns>
public string ParseOneNameAndValue(string NameAndValue)
{
if (!NameAndValue.Contains("="))
{
return "";
}

string returnmsg = "";
if (NameAndValue.Contains(","))//有逗号
{
foreach (string one in NameAndValue.Split(','))
{
if (one.Contains("=") && (!NameAndValue.StartsWith(one)))//逗号旁有等号且不是第一个,说明逗号是分隔两个Set-Cookie标头的
{
string[] indexArr = NameAndValue.Split(',');

int index = FindIndex(one, indexArr);
string one_s = "";

for (int i = index; i < indexArr.Length; i++)
{
one_s += indexArr[i];
}
returnmsg += ParseOneNameAndValue(one_s);//判断后面那一堆字符是不是一个Cookie
}
else//不是标头分隔
{
returnmsg += isPathDomainOrDate(NameAndValue);
}
}
}

else//没