转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> C语言系列 >> 正文
C#利用WebBrowser获取完整COOKIE介绍         ★★★

C#利用WebBrowser获取完整COOKIE介绍

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1174 更新时间:2011/11/23 16:17:16

在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获取页面中的button元素。并触…  [C语言系列]C# 过滤html,js,css代码 正则表达式
[C语言系列]C# DataGridView显示行号的两种方法  [C语言系列]C# WinForm 中Label自动换行 解决方法
[C语言系列]C# 线程调用主线程中的控件  [电脑应用]c# winform 打包部署 自定义界面 或设置开机启动
[C语言系列]C# 和 Linux 时间戳转换  [C语言系列]C#实现 WebBrowser中新窗口打开链接用默认或者指定…
[C语言系列]C#全角和半角转换  [C语言系列]c#WebBrowser查找并选择文本
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台