.NET 网站自动登录
首先,我们先定义一些变量:
C# code
private const string NET_SESSIONID= "ASP.NET_SessionId=";private const string CLIENTKEY = "ClientKey=";string aspcookie = "";private string html = "";private string sessionId = "";private string clientKey = "";private string viewState = "";
一、利用HttpWebRequest获取CSDN的登录信息,如ASP.NET_SessionId、ClientKey、__VIEWSTATE。这步可以放在Login_Load中,下面是代码:
C# code
private void Login_Load(object sender, EventArgs e){ HttpWebRequest request = WebRequest.Create("http://passport.csdn.net/UserLogin.aspx") as HttpWebRequest; request.Credentials = CredentialCache.DefaultCredentials; request.Accept = "*/*"; request.Referer = "http://passport.csdn.net/UserLogin.aspx"; request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)"; request.Method = "GET"; request.KeepAlive = true; request.Headers.Set("Accept-Language", "zh-CN"); request.Headers.Set("Accept-Encoding", "gzip, deflate"); HttpWebResponse response = request.GetResponse() as HttpWebResponse; System.IO.Stream responseStream = response.GetResponseStream(); System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("utf-8")); html = reader.ReadToEnd(); string viewStateFlag = "id=\"__VIEWSTATE\" value=\"";int i = html.IndexOf(viewStateFlag) + viewStateFlag.Length;int j = html.IndexOf("\"", i); viewState = html.Substring(i, j - i); aspcookie = response.Headers.Get("Set-Cookie"); sessionId = GetSessionId(); clientKey = GetClientKey();// 获取图片验证码 GetCode();}/// <summary>/// 获取ClientKey/// </summary>/// <returns></returns>private string GetClientKey(){// 这个仅仅是用来获取ClientKey值的长度 string id = "bb32434c-3bb3-4e44-92c3-8952f631ca87";int index = aspcookie.IndexOf(CLIENTKEY) + CLIENTKEY.Length; String str = aspcookie.Substring(index, id.Length);return str;}/// <summary>/// 获取ASP.NET_SessionId=/// </summary>/// <returns></returns>private string GetSessionId(){string id = "5mhl0tvbw5shlpnhxgwnck45";int index = aspcookie.IndexOf(NET_SESSIONID) + NET_SESSIONID.Length; String str = aspcookie.Substring(index, id.Length);return str;}
二、获取图片验证码,在这一步中需要注意的是,因为我们用的是另外一个HttpWebRequest去获取,所以为了保持获取的验证码与登录页面的Session一致,我们需要把Session等信息放入Header中去,下面是代码:
C# code
/// <summary>/// 产生新的验证码/// </summary>private void GetCode(){try { CookieCollection cookies = new CookieCollection(); cookies.Add(new Cookie("ASP.NET_SessionId",sessionId)); cookies.Add(new Cookie("ClientKey",clientKey)); HttpWebRequest httpWebRequest; HttpWebResponse webResponse;byte[] byteRequest = { }; httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://passport.csdn.net/ShowExPwd.aspx"); CookieContainer co = new CookieContainer(); co.Add(new Uri("http://passport.csdn.net"), cookies); httpWebRequest.CookieContainer = co; httpWebRequest.Accept = "*/*"; httpWebRequest.Referer = "http://passport.csdn.net/UserLogin.aspx"; httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)"; httpWebRequest.Method = "GET"; httpWebRequest.Headers.Set("Accept-Encoding", "gzip, deflate"); httpWebRequest.Headers.Set("Accept-Language", "zh-CN"); httpWebRequest.KeepAlive = true; webResponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream responseStream = webResponse.GetResponseStream(); Image original = Image.FromStream(responseStream); Bitmap bitMap = new Bitmap(original);this.pictureBox1.Image = bitMap; responseStream.Close(); }catch (Exception exception) { MessageBox.Show("ERROR:" + exception.Message); }}
三、最后一步是登录事件,登录很简单,把相关的信息放入请求数据中就行了。
C# code
private void btnLogin_Click(object sender, EventArgs e){ HttpWebRequest httpWebRequest; HttpWebResponse webResponse; string randnum = txtRandnum.Text;string password = txtPassword.Text;string loginname = txtUserName.Text; string postData = "ctl00$CPH_Content$tb_LoginNameOrLoginEmail={0}&ctl00$CPH_Content$tb_Password={1}&ctl00$CPH_Content$tb_ExPwd={2}&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={3}&ClientKey={4}&from={5}&MailParameters=&PrePage=&ctl00$CPH_Content$Image_Login.x=46&ctl00$CPH_Content$Image_Login.y=9"; postData = string.Format(postData, System.Web.HttpUtility.UrlEncode(loginname),System.Web.HttpUtility.UrlEncode(password),System.Web.HttpUtility.UrlEncode(randnum), System.Web.HttpUtility.UrlEncode(viewState), clientKey, System.Web.HttpUtility.UrlEncode("http://hi.csdn.net/"));byte[] byteRequest = Encoding.UTF8.GetBytes(postData); CookieCollection cookies = new CookieCollection(); cookies.Add(new Cookie("ASP.NET_SessionId", sessionId)); cookies.Add(new Cookie("ClientKey", clientKey)); cookies.Add(new Cookie("UN",loginname)); httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://passport.csdn.net/UserLogin.aspx"); CookieContainer co = new CookieContainer(); co.Add(new Uri("http://passport.csdn.net"), cookies); httpWebRequest.CookieContainer = co; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */*"; httpWebRequest.Referer = "http://passport.csdn.net/UserLogin.aspx"; httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)"; httpWebRequest.Method = "POST"; httpWebRequest.KeepAlive = true; httpWebRequest.Headers.Set("Cache-Control", "no-cache"); httpWebRequest.Headers.Set("Accept-Encoding", "gzip, deflate"); httpWebRequest.Headers.Set("Accept-Language", "zh-CN"); httpWebRequest.ContentLength = byteRequest.Length; Stream stream; stream = httpWebRequest.GetRequestStream(); stream.Write(byteRequest, 0, byteRequest.Length); stream.Close(); webResponse = (HttpWebResponse)httpWebRequest.GetResponse(); System.IO.Stream responseStream = webResponse.GetResponseStream(); String header = webResponse.Headers.ToString(); Stream getStream = webResponse.GetResponseStream();long contentLength = webResponse.ContentLength; byte[] outBytes = new byte[contentLength]; outBytes = ReadFully(getStream); getStream.Close(); getStream = new MemoryStream(outBytes); StreamReader streamReader = new StreamReader(getStream, Encoding.UTF8);string getString = streamReader.ReadToEnd(); streamReader.Close(); getStream.Close(); } static byte[] ReadFully(Stream stream){byte[] buffer = new byte[128];using (MemoryStream ms = new MemoryStream()) {while (true) {int read = stream.Read(buffer, 0, buffer.Length);if (read <= 0)return ms.ToArray(); ms.Write(buffer, 0, read); } }}
其中,在如果把数据以及需要把哪些数据Post到服务器中花费了不少时间,后来利用HttpAnalyzer来抓取浏览器中登录的数据包与WinForm登录的数据包进行了对比,才找出问题所在。
转载于:https://www.cnblogs.com/top5/archive/2011/11/29/2267317.html
.NET 网站自动登录相关推荐
- 「实用」微信扫码 - 关注公众号后网站自动登录
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:用好Java中的枚举,真的没有那么简单!个人原创+1博客:点击前往,查看更多 作者:destiny 链接:htt ...
- 自动化测试 - 12306火车票网站自动登录工具
还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗. 今天我们就开发一个12306网站自动登录软件. 帮助您轻松订票 Web的原理就是,浏览器发送一个Request给Web服务器,Web ...
- 网络爬虫playwright实现网站自动登录并签到
网络爬虫使用playwright工具来替代selenium工具,模拟浏览器加载动态网页,应对使用了json.ajax的复杂网站,从而通过网络爬虫实现网站自动登录并签到,设计思想如下: 1.打开网站登录 ...
- 自动化测试 (一) 12306火车票网站自动登录工具
还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗. 今天我们就开发一个12306网站自动登录软件. 帮助您轻松订票 通过前两篇博客Fiddler教程和HTTP协议详解,我们了解了Web ...
- 自动化测试项目实战 ——12306火车票网站自动登录工具
还记得前几年春运,12306火车票预订网站经常崩溃无法登录吗. 今天我们就开发一个12306网站自动登录软件. 帮助您轻松订票 通过前两篇博客Fiddler教程和HTTP协议详解,我们了解了Web的原 ...
- 微信扫码:关注公众号后网站自动登录的实现原理
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:destiny 链接:segmentfault.com/a/1190000022188562 序言 常见方式 平常大家见到过最多的扫码 ...
- 实现微信扫码或关注公众号后网站自动登录
常见方式 平常大家见到过最多的扫码登录应该是 开放平台网页登录 大概形式就是:点击微信登录后会出现一个黑页面,页面中有一个二维码,扫码后可以自动获取用户信息然后登录,但是这种方式需要申请开放平台比较麻 ...
- 【系统自动化开发】Python实现广东省公务员报名系统网站自动登录
[系统自动化开发]Python实现广东省公务员报名系统网站自动登录 [系统自动化开发]Python实现广东省公务员报名系统网站自动登录 一.原理 二.代码 [系统自动化开发]Python实现广东省公务 ...
- 自动化测试实战(一)12306火车票网站自动登录工具
还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗. 今天我们就开发一个12306网站自动登录软件. 帮助您轻松订票 Web的原理就是,浏览器发送一个Request给Web服务器,Web ...
- 网站自动登录功能的设计[转]
网站的自动登录一直都是有利于提高用户体验的功能,如果设计不好,也非常容易泄漏用户的账户信息. 比较常见的功能实现方案是将用户的登录信息保存在浏览器的Cookie中.看到一些设计有缺陷的网站会将用户的用 ...
最新文章
- LR需要理解的一些内容
- 瑞幸高层调整:郭谨一担任CEO和董事长 陆正耀出局
- 和 Pipelining 说再见,cURL 放弃使用管道技术
- python sorted函数倒序_Python sorted函数
- 大数据时代的大数据技术与应用有哪些
- fractional cascading
- 友链——一群dalao
- otter实现数据同步,otter manger的安装
- 室内定位技术之UWB篇
- __ffs 源码分析
- 支导线手工和电脑怎么计算方位角并推算坐标
- 软件开发随笔系列一——分布式架构实现
- 【软件质量】软件复杂性
- 先科n612打不开但是充电还是会亮红灯
- 在微信平台上做一个公众号,业务序列图
- 防爆计算机主板,一台不会害羞的矿用防爆电脑,我只服它!
- 继续关注工大gay…
- 武汉火神山医院 || BIM与装配式建筑的思考
- 第6季2:基于RTSP协议的实时视频流传输的源码分析
- android学习:《超级课程表》的课表界面设计
热门文章
- rose 2003 7.0_安卓微信7.0.17正式版更新:十大新鲜功能~
- android auto 字体大小,Android中给TextView字体大小用dp还是sp?dp和sp有什么区别?
- es存在某个字段的查阅_ElasticSearch系列02:ES基础概念详解
- 怎么做圆一圈圈扩散效果_推广为什么没有效果,网络推广怎么做才有效果?
- select weui 动态加载数据_weui中的picker使用js进行动态绑定数据问题
- 注册登录案例用MVC和mysql_用MVC模式实现简单用户登录注册功能
- python中堆排序_python堆排序,详细过程图和讲解,这样做小白都会
- centos代码切换图形_沙迪克慢走丝代码大全,G代码、T代码、M代码(值得收藏)...
- shell脚本按行读取文件的几种方式
- JS基础-Array对象手册