您的位置:首页 > 编程语言 > C#

抓出设置C#的WebBrowser控件Cookie失败的元凶

2014-01-05 09:47 357 查看
最近在以小米选购为案例来进行模拟登录,用到设置C#的WebBrowser控件Cookie达到访问选择小米手机版本的目的,如下图:


以为导入wininet.dll

/// <summary>
/// 引用wininet.dll + 定义InternetSetCookie
/// </summary>
/// <param name="lpszUrlName">需要设置Cookie的URL</param>
/// <param name="lbszCookieName">Cookie名称</param>
/// <param name="lpszCookieData">Cookie数据</param>
/// <returns>设置Cookie是否成功</returns>
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);


这里再加个设置Cookie的函数

public bool SetCookie(CookieCollection ccAll)
{

foreach (Cookie cookie in ccAll)
{
InternetSetCookie(
"http://" + cookie.Domain.ToString(),
cookie.Name.ToString(),
cookie.Value.ToString() + ";expires=Sun,22-Feb-2099 00:00:00 GMT");
}
return true;
}


就可以收工了呢,

不成想,前有拦路虎。

死活折腾都是这个效果,如下图:



绝望之际,想到了在用VS2010逐过程调试的时候,发现Cookie中有的Domain值开头就是点,比如.xiaomi.com,这样肯定就不行了。写个函数把点去掉得了。

public static string RemoveDot(string dotString)
{
if (dotString.StartsWith("."))
{
dotString = dotString.Substring(1, dotString.Length - 1);
}
return dotString;
}


调用它:

public bool SetCookie(CookieCollection ccAll)
{

foreach (Cookie cookie in ccAll)
{
InternetSetCookie(
"http://" + RemoveDot(cookie.Domain.ToString()),
cookie.Name.ToString(),
cookie.Value.ToString() + ";expires=Sun,22-Feb-2099 00:00:00 GMT");
}
return true;
}


这样就能在选择小米手机版本页面登录成功了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: