在WebBrowser下对网页进行操作其实是一件挺轻松的事情,他可以很方便实现自定义的网站访问习惯。而WebBrowser毕竟是对MS原生 控件的封装,当我们使用C#下的WebBrowser尤其是这样,虽然他可以更方便大家去调用,但是他的方便却是牺牲了灵活性为代价的。

有一天我想使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIE,百思 不得其解,这么简单的功能,WebBrowser也会秀逗。经过抓包分析,发现原来该网站对写入到用户端关键的Cookie,加入httponly

HttpOnly,其实是一个提高WEB网站应用程序安全性的一个功能,但是大家往往都把他给忽略掉了。比如在ASP.NET 2.0的web.config的配制文件里就提供这个子的设置

<httpCookies httpOnlyCookies="true" /> 

//代码如:

HttpCookie myCookie = new HttpCookie("myCookie"); 
myCookie.HttpOnly = true; 
Response.AppendCookie(myCookie);

在实际的项目中,用WebBrowser登录淘宝,

尝试分别用办法一和办法二,然后将其Cookie传给了HttpWebRequest请求需要登录才能查看的淘宝页面,按理说,应该不用再用HttpWebRequest模拟登录一次的,可是返回的仍然是淘宝的登录页面。

                //办法一:创建的CookieContainer
                //myRequest.CookieContainer = myCookieContainer;

//办法二:
                //myRequest.Headers[HttpRequestHeader.Cookie] = webBrowser1.Document.Cookie;

以上这二种办法,均发现 WebBrowser 的Cookie数量均减少,而且 JSESSIONID 不存在集合中。故模拟登陆策略失败。

//******************************************************************************************************

研究了近二天,切换另一个抓包神器,

Fiddler2

//办法三

根据捉包工具,用IE或火狐实际登陆后,再根据得到的Cookie,复制相应的键值,加到

HttpWebRequest 请求容器中,如下:

myRequest.Headers[HttpRequestHeader.Cookie] = "cookie2=....................... ";

采集通过。。。。

C# WebBrowser HttpWebRequest Cookie 的结合运用。的更多相关文章

  1. 获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据

    获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true) ...

  2. WebBrowser的Cookie操作之流量刷新机

    最近一直在思考着如何通过代码去伪装或实现人工自然浏览网页的效果,起初能想到的是用WebBrowser实现这一效果,需要达到的功能预想有以下几点: 1.自动刷新 2.模拟人工下拉滚动条并停留一段时间: ...

  3. 网上收集的WebBrowser的Cookie操作

    原文:网上收集的WebBrowser的Cookie操作 1.WebBrowser设置Cookie Code highlighting produced by Actipro CodeHighlight ...

  4. WebBrowser设置Cookie

    在winform里面经常会用到WebBrowser,这是一个难点就是如何设置cookies,注意,Docment对象是只读的,所以WebBrowser.Docment.cookie也就只有get方法, ...

  5. WinForm WebBrowser 设置cookie

    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static exte ...

  6. c# HttpWebRequest Cookie 设置到 webBrowser 控件

    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static exte ...

  7. webBrowser.Document.Cookie取不到HttpOnly的Cookie,取Cookie不完整

    在做数据采集时,有些网站需要输入验证码,但各网站验证码都不同,不可能有完美的识别验证码的代码,所以我也没去研究,我所采取的方案是:在winform里通过WebBrowser调用网页先手动登录系统,然后 ...

  8. c# 获取 webbrowser 完整 cookie

    下面的代码实现的功能确实如标题所言,但要求是获取的是当前进程内的webbrowser,跨进程或引用的ShellWindows对象无效, 哎我本来两种情况都要用,只把前者代码先记下: internal ...

  9. c# webbrowser 清除cookie和缓存

    由于缓存文件是特殊的文件,以及WebBrowser与IE版本有关因此删除缓存绝对不可能用一些IO函数就总可以解决的因此我的这些函数在IO操作的基础上,又针对环境进行相应的清理. static clas ...

随机推荐

  1. 盒模型与在低版本IE下的区别

    对css有一定了解的同学一定听说过盒模型,在这里以我自己的一点儿了解和认知来解释一下盒模型与盒模型在低版本IE浏览器下与其他浏览器下的区别. W3c标准下的盒模型 盒模型由 content(内容),p ...

  2. HDU 4691 正解后缀数组(暴力也能过)

    本来是个后缀数组,考察算法的中级题目,暴力居然也可以水过,就看你跳不跳坑了(c++和G++返回结果就很不一样,关键看编译器) 丝毫不差的代码,就看运气如何了.唯一差别c++还是G++,但正解是后缀数组 ...

  3. Python常用函数、方法、模块记录

    常用函数: 1.pow():乘方 2.abs():绝对值 3.round():四舍五入 4.int():转换为整数 5.input():键盘输入(会根据用户的输入来做类型的转换) raw_input( ...

  4. ajax的status为201依然触发jquery的error事件的问题

    昨天在调试一个ajax的时候发现,即使status是201,仍然会触发jquery的error事件.statusText是"parseerror". 通过在stackoverflo ...

  5. CodeForces比赛总结表

    Codeforces A                     B                        C                             D            ...

  6. onTouch与onClick冲突解决方法

    view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ...

  7. K-Means 聚类算法原理分析与代码实现

    前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...

  8. JDBC连接数据库演示

    今天重新学习了JDBC连接数据库,使用的数据库是Oracle,在运行前已经手动建立了一张t_user表,建表信息如下: create table t_user( card_id ) primary k ...

  9. Easyui扩展icon下载

    链接:http://pan.baidu.com/s/1eS7bh0e 密码:owzp 来源:https://github.com/cjw0511/jquery-extensions

  10. UE4 4.14 专用服务器没有生成解决办法

    简单说一下UE4 专用服务器的生成(网上也有其它版本的但是在4.14.1 上不管用) 1.用源代码编译的引擎(如何获取百度上有很多介绍)创建一个C++ UE4 工程. 2. 在vs 中找到红色这个文件 ...