C#利用WebBrowser获取完整COOKIE介绍
2010-09-10 15:53
393 查看
摘要:使用WebBrowser控件获取网站的COOKIE有时候是不完整的,本文介绍WebBrowser控件获取网站的COOKIE不完整的原因,并提供一个利用WebBrowser获取完整COOKIE的示例供参考。
-
在WebBrowser下对网页进行操作其实是一件挺轻松的事情,他可以很方便实现自定义的网站访问习惯。而WebBrowser毕竟是对MS原生控件的封装,当我们使用C#下的WebBrowser尤其是这样,虽然他可以更方便大家去调用,但是他的方便却是牺牲了灵活性为代价的。
有一天我想使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIE,百思不得其解,这么简单的功能,WebBrowser也会秀逗。经过抓包分析,发现原来该网站对写入到用户端关键的Cookie,加入httponly
HttpOnly,其实是一个提高WEB网站应用程序安全性的一个功能,但是大家往往都把他给忽略掉了。比如在ASP.NET 2.0的web.config的配制文件里就提供这个子的设置
就是这个小小的设置,令WebBrowser拿他却是没辙,查了大量资料,要想实现这个功能,一定需要实现对最原始的网络流的读写,这种方法对很多程序员来说实现难度太大了。下面就教大家实现一个很简单的实现方法
以上为你介绍的是C#利用WebBrowser获取完整COOKIE,希望对你有所帮助。
-
在WebBrowser下对网页进行操作其实是一件挺轻松的事情,他可以很方便实现自定义的网站访问习惯。而WebBrowser毕竟是对MS原生控件的封装,当我们使用C#下的WebBrowser尤其是这样,虽然他可以更方便大家去调用,但是他的方便却是牺牲了灵活性为代价的。
有一天我想使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIE,百思不得其解,这么简单的功能,WebBrowser也会秀逗。经过抓包分析,发现原来该网站对写入到用户端关键的Cookie,加入httponly
HttpOnly,其实是一个提高WEB网站应用程序安全性的一个功能,但是大家往往都把他给忽略掉了。比如在ASP.NET 2.0的web.config的配制文件里就提供这个子的设置
1 <httpCookies httpOnlyCookies="true" /> 2 // ***********.NET的代码如: 3 HttpCookie myCookie = new HttpCookie("myCookie"); 4 myCookie.HttpOnly = true; 5 Response.AppendCookie(myCookie);
就是这个小小的设置,令WebBrowser拿他却是没辙,查了大量资料,要想实现这个功能,一定需要实现对最原始的网络流的读写,这种方法对很多程序员来说实现难度太大了。下面就教大家实现一个很简单的实现方法
1 public string Cookie() 2 { 3 if (this.Url == null) 4 return null; 5 string dir = this.Url.Host; 6 FileStream fr = new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Cookies) + "\\index.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 7 byte[] __dat = new byte[(int)fr.Length]; 8 fr.Read(__dat, 0, __dat.Length); 9 fr.Close(); 10 fr.Dispose(); 11 string __datstream = Encoding.Default.GetString(__dat); 12 int p1 = 0; 13 p1 = __datstream.IndexOf("@" + dir, p1); 14 if (p1 == -1) 15 p1 = __datstream.IndexOf("@" + dir.Substring(dir.IndexOf('.') + 1)); 16 if (p1 == -1) 17 return this.Document.Cookie; 18 int p2 = __datstream.IndexOf(".txt", p1 + 1); 19 p1 = __datstream.LastIndexOf('@', p2); 20 string dm = __datstream.Substring(p1 + 1, p2 - p1 + 3).TrimStart('?'); 21 p1 = __datstream.LastIndexOf(":", p1); 22 p2 = __datstream.IndexOf('@', ++p1); 23 __datstream = string.Format("{0}@{1}", __datstream.Substring(p1, p2 - p1), dm); 24 25 Dictionary<string, string> __cookiedicts = new Dictionary<string, string>(); 26 string __n; 27 StringBuilder __cookies = new StringBuilder(); 28 __datstream = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.Cookies) + "\\" + __datstream, Encoding.Default); 29 p1 = -2; 30 do 31 { 32 p1 += 2; 33 p2 = __datstream.IndexOf('\n', p1); 34 if (p2 == -1) 35 break; 36 __n = __datstream.Substring(p1, p2 - p1); 37 p1 = p2 + 1; 38 p2 = __datstream.IndexOf('\n', p1); 39 if (!__cookiedicts.ContainsKey(__n)) 40 __cookiedicts.Add(__n, __datstream.Substring(p1, p2 - p1)); 41 } 42 while ((p1 = __datstream.IndexOf("*\n", p1)) > -1); 43 if (this.Document.Cookie != null && this.Document.Cookie.Length > 0) 44 { 45 foreach (string s in this.Document.Cookie.Split(';')) 46 { 47 p1 = s.IndexOf('='); 48 if (p1 == -1) 49 continue; 50 __datstream = s.Substring(0, p1).TrimStart(); 51 if (__cookiedicts.ContainsKey(__datstream)) 52 __cookiedicts[__datstream] = s.Substring(p1 + 1); 53 else 54 __cookiedicts.Add(__datstream, s.Substring(p1 + 1)); 55 } 56 } 57 foreach (string s in __cookiedicts.Keys) 58 { 59 if (__cookies.Length > 0) 60 __cookies.Append(';'); 61 __cookies.Append(s); 62 __cookies.Append('='); 63 __cookies.Append(__cookiedicts[s]); 64 } 65 return __cookies.ToString(); 66 }
以上为你介绍的是C#利用WebBrowser获取完整COOKIE,希望对你有所帮助。
相关文章推荐
- C#利用WebBrowser获取完整COOKIE介绍 (转帖)
- C#利用WebBrowser获取完整COOKIE介绍
- 【转载】C#利用WebBrowser获取完整COOKIE介绍
- paip.C#.NET利用WebBrowser获取完整COOKIE
- C#利用WebBrowser获取完整COOKIE
- C#下利用WebBrowser完整获取COOKIE
- C#下利用WebBrowser完整获取COOKIE
- C#获取webbrowser完整cookie
- C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie
- c# 获取 webbrowser 完整 cookie
- C#在WebBrowser下获取完整的Cookies(包括含HTTPOnly属性的)
- C#基于WebBrowser获取cookie的实现方法
- C# 获取 新浪微博登录之后的 完整的Cookie
- C#如何通过SOCKET的方式获取HTTPONLY COOKIE
- Jmail 介绍 及其 利用Jmail接收邮件 (C#)
- 利用webBrowser获取页面iframe中的内容
- [Android] Webview利用CookieSyncManager获取或设置Cookies的策略
- C#用WebBrowser控件获取Post数据
- HTML5利用WebRTC的getUserMedia获取摄像头信息模拟拍照及视频(完整示例)
- C# 利用net 命令获取域用户列表