打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
WebBrowser和WebClient共享cookie
如果程序同时用到了webBrowser(主要是navigate操作)和webClient(DownloadData操作),两者之间的cookie共享问题需要解决,即从webbrowser中取出cookie传给webClient,反过来也是一样。
具体参考:
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);            } 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C#三种模拟自动登录和提交POST信息的实现方法 - 水煮.net - 博客园
C# 设置IE Cookie 从而实现自动打开需要登录的页面
C#获取网页源码,自动判断网页字符集编码[转]
WinForm WebBrowser 设置cookie
delphi 获取webbrowser的cookies给Idhttp用
Java读取Cookie
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服