• 摘要:使用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的配制文件里就提供这个子的设置

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介绍相关推荐

  1. springboot-前端js设置cookie的name、value值,后端利用name获取指定cookie的value值

    springboot-前端js设置cookie的name.value值,后端利用name获取指定cookie的value值         前端 js 将传递过来的 id 存入cookie中, coo ...

  2. 利用webBrowser获取页面iframe中的内容

    1.获取frame的document HtmlDocument htmlDoc = webBrowser1.Document;   htmlDoc = webBrowser1.Document.Win ...

  3. C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie

    网上找到的可以完整获取Cookie的方法,转载一下希望能帮助更多人. 亲测可用 在Winform中使用WebBrowser控件获取网站的Cookie有时候是不完整的,默认调用Document.Cook ...

  4. web网页获取,cookie 的管理,post和get方式的模拟。

    2019独角兽企业重金招聘Python工程师标准>>> web登陆无非就是网页获取,cookie 的管理,post和get方式的模拟. 1.网页内容获取 java.io.inputs ...

  5. 爬虫第三弹——利用EditThisCookie获取cookie跳过登陆验证(医脉通)

    爬虫第一弹:利用Scrapy爬取1905电影网 爬虫第二弹:深网爬虫指南,AcFun评论爬取教程 前言 最近有个活,需要将约300个英文医学名词翻译成中文. 经过一番查找发现医脉通的词典还不错,但是必 ...

  6. 【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

    链接:https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwd=abc1 利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023- ...

  7. C# 网络编程之webBrowser获取网页url和下载网页中图片

    该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试下载网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识.正则表达式实现浏览.获取url.下 ...

  8. 在Linux上利用python获取本机ip

    下面介绍在Linux上利用python获取本机ip的方法. 经过网上调查, 发现大致有两种方法, 一种是调用shell脚本,另一种是利用python中的socket等模块来得到,下面是这两种方法的源码 ...

  9. Matlab与数据结构 -- 如何获取完整文件名

    本图文介绍了Matlab中获取完整文件名的函数fullfile().

最新文章

  1. maven项目找不到pom.xml配置的dependency jar中的类问题解决方法
  2. grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程
  3. 我在亦庄见了说中文的爱因斯坦,会比心的熊猫,还有一场意念打字大赛
  4. 文巾解题 344 反转字符串
  5. Oracle数据库设计要做到五戒
  6. [BUUCTF-pwn]——pwn1_sctf_2016
  7. android 移除fragment,Android Viewpager+Fragment取消预加载及Fragment方法的学习
  8. Leetcode之跳跃游戏Ⅱ
  9. Linux学习笔记3 - 目录和文件管理
  10. 记录下Gradle化Android Gallery3D应用的过程
  11. ios14描述文件无法与服务器连接,iOS14屏蔽更新描述文件已损坏,无法安装的解决办法...
  12. Easypoi模版形式导出excel导出图片
  13. python超清壁纸_Python爬取5K分辨率超清唯美壁纸
  14. 2021-03-11 Android 异常情况下长按power按键10s关机或者重启
  15. Github上的开源项目3
  16. JGG(IF 5.733)专刊征稿:人体微生物组
  17. 戴尔蓝牙以及其他驱动
  18. java计算机毕业设计在线毕设选题系统源码+系统+mysql数据库+lw文档
  19. 帆软:像阿甘一样,奔跑在商业智能的赛道上
  20. 大模型微调技术(Adapter-Tuning、Prefix-Tuning、Prompt-Tuning(P-Tuning)、P-Tuning v2、LoRA)

热门文章

  1. 信息学奥赛一本通(1201:菲波那契数列)
  2. 求10000以内n的阶乘(信息学奥赛一本通-T1172)
  3. 国王游戏(洛谷-P1080)
  4. Minimum Window Substring 最小覆盖子串算法
  5. 4 FI配置-财务会计-创建会计科目表或总账科目表(COA-Chart of Account)
  6. 实验楼linux指令,Linux操作命令(二)
  7. python 默认参数_避坑指南!Python里面的这九个坑,坑的就是你!
  8. CMake file文件操作命令
  9. Vision Transformer中的自监督学习
  10. YARN部件以及执行流程