今天帮朋友做了个工具,用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. 第九章 词典 (b)散列:原理

  2. 树形DP(记忆化搜索) HYSBZ - 1509

    题目链接:https://vjudge.net/problem/HYSBZ-1509 我参考的证明的论文:8.陈瑜希<多角度思考 创造性思维>_百度文库  https://wenku.ba ...

  3. navicat连接虚拟机中mysql"Access denied for user'root'@'IP地址'"问题

    登陆要链接的服务器上的mysql 命令:mysql -uroot -p123456 然后执行 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED ...

  4. Python+Selenium学习--设置等待时间

    场景 sleep():设置固定休眠时间.python 的time 包提供了休眠方法sleep() ,导入time 包后就可以使用sleep()进行脚本的执行过程进行休眠.implicitly_wait ...

  5. 导出可运行jar包

    @参考文档 选中项目右击export 可运行jar文件 Extract required libraries into generated JAR:将所需库导出到导出的jar包根目录下,效果如下 Pa ...

  6. echarts横向柱状图如果想打开网址

    代码: var data = eval(data); var xList = new Array(); var yList = new Array(); var urlList = new Array ...

  7. .net core和.net 4.7区别和联系笔记

    1. 简单说,都是.net standard所定义的接口的实现,都是 .net standard的儿子. 3down voteaccepted C# is a programming language ...

  8. java命令行调用本地文件协议hikvideoclient://

    最近在做一个视频项目,项目中需要通过调用海康本地协议打开视频播放器,起初尝试通过Process/ProcessBuilder无解,因为这个是调用本地应用程序的. 我要调用的是本地伪协议,最终通过一些研 ...

  9. python subprocess 小例子

    #服务端import socketimport osimport subprocessphone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ...

  10. Oracle_SQL(3) DML增删改

    sql语言按功能分为:数据定义语言DDL.数据操纵语言DML.数据查询语言DQL.数据控制语言DCL 一.数据操纵语言DML1.insert 新增 语法:insert into <表名> ...