C#下利用WebBrowser完整获取COOKIE
Posted bbc2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#下利用WebBrowser完整获取COOKIE相关的知识,希望对你有一定的参考价值。
C#下利用WebBrowser完整获取COOKIE
在WebBrowser下对网页进行操作其实是一件很轻松的事情,他可以很方便实现自定义的网站访问习惯。而WebBrowser毕竟是对MS原生控件的封装,当我们使用C#下的WebBrowser尤其是这样,虽然他可以更方便大家去掉用,但是他的方便却是牺牲了体积为代价的。
有一天我想使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIE,百思不得其解,这么简单的功能,WebBrowser也秀逗。通过抓包分析,发现原来该网站对写入到用户端关键的Cookie,仅加入http
HttpOnly,实际上是一个提高WEB网站应用程序安全性的一个功能,但是大家经常都把他给忽略掉了。放在ASP.NET 2.0的web.config的配制文件里就提供这个子的设置
1 <httpCookies httpOnlyCookies =“ true” />
2 // ***********。NET的代码如:
3 HttpCookie myCookie =新的HttpCookie(“ myCookie”);
4 myCookie.HttpOnly = true;
5 Response.AppendCookie(myCookie);
就是这个小小的设置,令WebBrowser带他却是没辙,查抄资料,要想实现这个功能,一定需要实现对最原始的网络流的读写,这种方法对很多程序员来说实现困难太大了。下面就教大家实现一个很简单的实现方法
1个公共字符串Cookie()
2 {
3如果(this.Url == null)
4返回null;
5字符串dir = this.Url.Host;
6 FileStream fr =新的FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Cookies)+“ \ index.dat ”,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
7个字节[] __dat =新字节[(int)fr.Length];
8楼阅读(__dat,0,__dat.Length);
9楼Close();
10 fr.Dispose();
11个字符串__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如果(p1 == -1)
17返回this.Document.Cookie;
18 int p2 = __datstream.IndexOf(“。txt”,p1 +1);
19 p1 = __datstream.LastIndexOf(‘@‘,p2);
20个字符串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 <字符串,字符串> __cookiedicts = new Dictionary <字符串,字符串>();
26字符串__n;
27 StringBuilder __cookies =新的StringBuilder();
28 __datstream = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.Cookies)+“ \” + __datstream,Encoding.Default);
29 p1 = -2;
30做
31 {
32 p1 + = 2;
33 p2 = __datstream.IndexOf(‘ n‘,p1);
如果(p2 == -1)
35则中断34 ;
第36章(许我倾城)
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(this.Document.Cookie.Split(‘;‘)中的字符串s)
46 {
47 p1 = s.IndexOf(‘=‘);
48如果(p1 == -1)
49继续;
50 __datstream = s.Substring(0,p1).TrimStart();
51如果(__cookiedicts.ContainsKey(__ datstream))
52 __cookiedicts [__ datstream] = s.Substring(p1 + 1);
53其他
54 __cookiedicts.Add(__ datstream,s.Substring(p1 + 1));
55}
56}
57 foreach(__ cookiedicts.Keys中的字符串s)
58 {
59 if(__cookies.Length> 0)
60 __cookies.Append(‘;‘);
61 __cookies.Append(s);
62 __cookies.Append(‘=‘);
63 __cookies.Append(__ cookiedicts [s]);
64}
65返回__cookies.ToString();
66} 广州代孕[电13802269370] 北京代孕咨询电13802269370 代孕[微13802269370]+
以上是关于C#下利用WebBrowser完整获取COOKIE的主要内容,如果未能解决你的问题,请参考以下文章
c# WebRequest 使用 WebBrowser cookie