今天帮朋友做了个工具,用webbrowser做的,用户使用用户名密码登陆网站后,需要在后台下载和分析一些页面。

分析页面使用的是htmlparser .net版

里面唯一需要解决的问题是,登陆后的cookie在webbrowser上,使用HttpWebRequest无法保存其状态。

因为中间有几个cookie值是httponly的!

上网查询到使用InternetGetCookieEx函数可以在ie8中读出httponly的值

然后,解决方法如下:

这段代码可以获取登陆后的cookie

 [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved); private static string GetCookieString(string url)
{
// Determine the size of the cookie
int datasize = ;
StringBuilder cookieData = new StringBuilder(datasize); if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
{
if (datasize < )
return null; // Allocate stringbuilder large enough to hold the cookie
cookieData = new StringBuilder(datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
return null;
}
return cookieData.ToString();
}

使用HttpWebRequest获取页面

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Headers.Clear();
request.Headers[HttpRequestHeader.Cookie] = GetCookieString(url);
request.ContentType = "application/x-www-form-urlencoded";
request.KeepAlive = true;
request.AllowAutoRedirect = true;
HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();
using (System.IO.Stream dataStream = httpResponse.GetResponseStream())
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(dataStream, Encoding.GetEncoding("gb2312")))
{
html = sr.ReadToEnd();
sr.Close();
}
}
httpResponse.Close();

一些相关链接:

http://msdn.microsoft.com/en-us/library/aa384714.aspx 官方描述

http://s.yanghao.org/program/viewdetail.php?i=5382 这里面的讨论很有帮助

http://forums.asp.net/p/1598274/4071908.aspx  InternetGetCookieEx 的申明方法和INTERNET_COOKIE_HTTPONLY的值

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/64b8cdc6-ca00-4c31-b450-a781419d982c 另一种申明,未采纳

http://topic.csdn.net/u/20090813/10/c28dc154-3ab5-4401-86b1-ddef7f005fda.html 一个有些作用的讨论

转这篇 提示使用INTERNET_COOKIE_HTTPONLY

http://blog.csdn.net/windless0530/archive/2010/05/12/5583618.aspx

InternetSetCookieEx和InternetGetCookieEx使用tip(COOKIE文件格式) 收藏 这两个函数都要注意,szCookieName这个参数不太好使,最好设为NULL,然后在写cookie时手动写在内容里:

"my_cookie_name=my_cookie_value; path=/; expires=Wed, 30-Mar-11 09:00:00 GMT; domain=.csdn.net"

读的时候整个读出来然后自己解析。

另外,InternetGetCookieEx的dwFlag参数,对于IE8,最好加上INTERNET_COOKIE_HTTPONLY,这样才能读出具有httponly属性的cookie字段值。如果SDK比较老,没有这个宏,可以直接从DLL里GetProcAddress把这两个函数扒出来,然后定义这个值为0x00002000使用。对于IE6和IE7,想获取HTTPONLY的COOKIE,就只好手动读取COOKIE文件然后解析了。

COOKIE文件格式:

_ntes_nnid                                  // 字段名

456f74e9863f8f4b1a1e37774b0c464d,0            // 字段值

163.com/                                     // 字段所属域

3584                                            // 标志位

3205176064                                // 过期时间(低位)

37425091                                    // 过期时间(高位)

2444768976                                // 创建时间(低位)

30082544                                    // 创建时间(高位)

(转)用webbrowser做的网站登陆程序,如何获取cookie并且保存在程序中 (IE8有效) ,用途嘛,你懂的。的更多相关文章

  1. 登陆用户怎样获取验证码和保存用户到cookie中

    User表: User.java package user.domain; import java.io.Serializable; import java.util.Date; public cla ...

  2. 关于webbrowser控件自动登陆的问题

    原文:关于webbrowser控件自动登陆的问题 楼主dtb(陈少)2004-03-04 22:16:55 在 VB / 网络编程 提问 请问怎么用webbrowser自动登陆www.jp168.co ...

  3. ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要

    ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm --  Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...

  4. python urllib2 模拟网站登陆

    python urllib2 模拟网站登陆 1. 可用浏览器先登陆,然后查看网页源码,分析登录表单 2. 使用python urllib2,cookielib 模拟网页登录 import urllib ...

  5. ASP.NET CORE做的网站运行在docker实践

    用VS2017 建立了 DotNet Core 2.2 的网站后,如何转移到 Docker 下运行? 下面分两种方式来实践: 1.直接手动命今行,将本机目录映射进Docker,运行网站.2.制作 Im ...

  6. 如何通过Python暴力破解网站登陆密码

    首先申明,该文章只可以用于交流学习,不可以用于其他用途,否则后果自负. 现在国家对网络安全的管理,越来越严,但是还是有一些不法网站逍遥法外,受限于国内的人力.物力,无法对这些网站进行取缔. 今天演示的 ...

  7. C# 模拟网站登陆

    实现此功能首先需要借助一些抓包工具,对相应的网站登陆过程进行分析,此过程根据网站的不同,可能复杂,也可能很简单.常用的抓包工具FF下FireBug和IE下的HttpWatch.这两个工具很强大,以此工 ...

  8. 织梦dedecms做的网站首页标题篡改跳转赌博网站解决方案

    织梦dedecms因其强大功能,简单实用的优点常常被用来做企业网站,程序开源使用的人多了网站漏洞多会有中毒的情况,常见的有一种,首页标题关键词描述被篡改,百度快照收录点击后跳转的赌博网站,怎么解决这个 ...

  9. python模拟网站登陆-滑动验证码

    普通滑动验证 以http://admin.emaotai.cn/login.aspx为例这类验证码只需要我们将滑块拖动指定位置,处理起来比较简单.拖动之前需要先将滚动条滚动到指定元素位置. impor ...

随机推荐

  1. java根据wsdl调用webservice

    本方法参考 Java核心技术 卷二 (第八版) 中10.6.2节相关内容,特与大家分享,欢迎大家批评指教 <a href="http://www.webxml.com.cn/" ...

  2. Kubernetes 之上的架构应用

    规划并运转一个兼顾可扩展性.可移植性和健壮性的运用是一件很有应战的事情,尤其是当体系杂乱度在不断增长时.运用或体系 本身的架构极大的影响着其运转办法.对环境的依靠性,以及与相关组件的耦合强弱.当运用在 ...

  3. 第四章 栈与队列(a)栈接口与实现

  4. laravel框架中报错 DataTables warning: table id=xxx-table - Cannot reinitialise DataTable.

    laravel框架中报错 DataTables warning: table id=xxx-table - Cannot reinitialise DataTable. 分析: initializin ...

  5. 十个前端UI优秀框架

    最近需要一些前端框架,于是在网上整理了一些感觉不错的前端框架,有pc端和移动端,为了方便日后自己先记录下来了... Bootstrap 首先说 Bootstrap,估计你也猜到会先说或者一定会有这个( ...

  6. Chrome控制台格式化输出

    一 格式化输出文字 console.log('%c你好','color:green;'); console.log('%c你好%c啊','color:green;','color:blue;'); 二 ...

  7. #define宏重定义

    #define A 1 在同一个工程的另外一个文件里又定义了#define A 2 并不会报错(2010vs) 亲测可用 但是最后该宏变量A的值 ,应该是预处理-----顺序处理------最后一个运 ...

  8. MVc Identity登陆锁定

    2016-08-03 [ASP.NET Identity] OAuth Server 鎖定(Lockout)登入失敗次數太多的帳號 743 6 ASP.NET Identity 檢舉文章 2016-0 ...

  9. easyrules

    http://www.easyrules.org/tutorials/hello-world-tutorial.html

  10. java的eclipse的使用

    1下载eclipse地址:www.eclipse.org/downloads/ 解压就可安装 注意: 这可能你是没有安装java运行环境(jre或jdk) 直接www.java.com,下载就行 下一 ...