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#WebBrowser怎么获取和设置Cookie的方法

C#WebBrowser怎么获取和设置Cookie的方法

C#WebBrowser怎么获取和设置Cookie的方法

c# WebRequest 使用 WebBrowser cookie

webbrowser如何获取cookie中的sessionid

webBrowser获取cookie