具体参考:
http://www.nishizhen.cn/2011/12/%E8%8E%B7%E5%8F%96webbrowser%E4%B8%AD%E7%9A%84cookies%EF%BC%88%E5%8C%85%E5%90%ABasp-net_sessionid%E7%AD%89%EF%BC%89/
http://www.cnblogs.com/cai9911/archive/2008/03/05/1091443.html
WebBrowser-->WebClient
因为browser.Document.Cookie始终为null,故采用另外的方法获得cookie:
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved); private static string GetCookieString(string url) { // Determine the size of the cookie int datasize = 256; StringBuilder cookieData = new StringBuilder(datasize); if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null)) { if (datasize < 0) return null; // Allocate stringbuilder large enough to hold the cookie cookieData = new StringBuilder(datasize); if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null)) return null; } return cookieData.ToString(); }// REBOL edit, Copy cookie from webbrowser to webclient, we met a MS bug that no cookie in webbrowser //string cookieStr = m_webBrowser.Cookie();//m_webBrowser.Document.Cookie; string cookieStr = GetCookieString("http://sub1.abc.com"); string[] cookstr = cookieStr.Split(';'); foreach (string str in cookstr) { string[] cookieNameValue = str.Split('='); Cookie ck = new Cookie(cookieNameValue[0].Trim ().ToString(), cookieNameValue[1].Trim ().ToString()); ck.Domain = "sub1.abc.com"; HttpClient.getInstance().CookieContainer.Add(ck); }
WebClient-->WebBrowser
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool InternetSetCookie(string lpszUrl, string lpszCookieName, string lpszCookieData);// Copy cookie from webclient to webbrowser CookieCollection cookies = HttpClient.getInstance().CookieContainer.GetCookies(new Uri("http://sub2.abc.com")); foreach (Cookie cookie in cookies) { InternetSetCookie("http://sub2.abc.com", cookie.Name, cookie.Value); }