C#模拟post消息,实现登陆功能(包括CAS系统)
这方面的文章多得很,我这里把一些细节说一下。
1. 选用C#中的HttpWebRequest、HttpWebResponse和CookieContainer类。HttpWebRequest是用来提交web请求的,包括post和get;HttpWebResponse是用来接收服务器对本次请求的回复;CookieContainer是用来存放Cookie的集合,有些页面只有登录用户才能查看。这个时候就需要保存Cookie,以便使登录时建立的session保存下来这样服务器就会认为我们一直是登录状态了。
2. 在浏览器中正常登录一次,查看登录时的post信息。我推荐使用FireFox浏览器+HttpFox插件。主要是查看post字符串和提交的URL。比如登录上交葡萄(http://pt.sjtu.edu.cn/login.php),post的字符串为“username=test&password=123456”,对应的URL为“http://pt.sjtu.edu.cn/takelogin.php”。在HttpWebRequest中设置一些这些属性即可实现登录功能,关键的代码如下:
string data = "username=test&password=123456";cookie = new CookieContainer();byte[] byteArray = Encoding.UTF8.GetBytes(data);request = (HttpWebRequest)HttpWebRequest.Create("http://pt.sjtu.edu.cn/takelogin.php");request.CookieContainer = cookie;request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";request.ContentLength = byteArray.Length;Stream stream = request.GetRequestStream();stream.Write(byteArray, 0, byteArray.Length);stream.Close();response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);string resPage = reader.ReadToEnd();
3. 如果服务器端设置了CAS服务器,登录过程就会复杂一些。首先也是用HttpFox查看登录过程,会发现当post用户名+密码后,会得到CAS服务器回送的一个转移地址(临时生成的URL)。访问该URL,服务器回送一个JSESSIONID,作为本次会话的凭据,也是唯一的。将该JSESSIONID加入到CookieContainer中:
cookie.Add(new Uri("http://passport.xjtuns.cn"), new Cookie("JSESSIONID", jsessionid));
这时就已经登录了,可以访问登陆后才能访问的页面。
4. 最困难的情况,就是登陆页面上面有图片形式的验证码,我想到的解决方案有:人工参与、设置cookie和图片识别。第一种方法,就是在试图登录时,将页面的验证码图片下载到本地,人眼识别后由程序继续进行下面的工作。第二种方法,首先在浏览器中登录一次,记录下cookie中的信息(一般是c_expiresintv、c_secure_uid、 c_secure_pass、 c_secure_ssl、c_secure_login等信息,通过HttpFox都可以查看到),然后在程序中设置User-Agent和这些cookie数据,冒充浏览器。当然这个过程中,不要关闭浏览器。第三种方法比较困难,需要设计图像处理和模式识别的算法,而且一旦一次提交错误,服务器会更新验证码图片。
如果验证码是纯数字的,我的下一篇文章(http://blog.csdn.net/zheng_ai/archive/2010/08/15/5813693.aspx)或许能有所帮助。
转载于:https://www.cnblogs.com/wangchunming/archive/2012/04/02/2430157.html
C#模拟post消息,实现登陆功能(包括CAS系统)相关推荐
- ❤️Java实现模拟QQ(消息通信+登陆界面美化)❤️
一.登陆界面的实现 登陆界面主要使用了JFrame,以及相关的一些组件,并且在界面中加上监听 登陆界面效果图 登陆界面代码Login类 package com.lding.login;import c ...
- # python模拟各大网站登陆方式, 包括爬虫--你们要的全都有
python模拟各大网站登陆方式,以及一些爬虫程序 仅供练习使用,代码注释很详细 走过路过的大佬们,记得给个star支持一下,嘻嘻嘻? 收集了一些各大网站登陆方式, 和一些网站的爬虫程序,有的是通过s ...
- 用Java程序模拟银行ATM机,实现包括存款、取款、查询、转账功能的简单应用
(1)想象现实世界中的相关操作沙及哪些实体呢?一个是储户,一个是ATM机.因 此根据面向对象中的抽象原则,可将其抽象为两个类:代表储户的账户信息类,代表银行 ATM机的ATM类.外加一个主类(负责实例 ...
- QQ登陆功能的实现2
QQ登陆功能的实现2 由于看到园子里有朋友说需要讲解和剖析实现的步骤,前面的QQ登陆实现只有代码,所以这篇补上 1. 分析 1). 当运行QQ.exe后会出现qq登陆界面的窗体 2). 我们用spy ...
- 综合演练 实现登陆功能 1124
综合演练 实现登陆功能 1124 目标 本项目需要有两个窗体, 其中第1个窗体用于登录,如果登录成功,那么跳转到第2个窗体, 在第2个窗体当中,显示用户的一些简单的信息,作为登录成功的一个模拟. 如果 ...
- 三星S10指纹识别玩脱了!多家金融APP关闭指纹登陆功能
近日,三星Galaxy S10等设备的指纹识别安全漏洞问题引发全球关注,尽管三星官方发布声明将发布补丁修复该问题,目前国内外多家金融机构已采取措施,关闭涉及相关机型的指纹登录功能. 此前据外媒报道,一 ...
- 用javascript实现以下功能!_用python80行代码实现一个微信消息撤回捕捉功能
自从微信出了这个消息撤回功能小编我都已经快被折磨死了,小编本来就是个好奇心比较重的人,微信出了这个功能之后小编感觉身体一天不如一天了,每次看着女神发来的信息又撤回,可谓是心里痒痒啊.所以小编就写了一个 ...
- 用Python 80行代码实现一个微信消息撤回捕捉功能
自从微信出了这个消息撤回功能小编我都已经快被折磨死了,小编本来就是个好奇心比较重的人,微信出了这个功能之后小编感觉身体一天不如一天了,每次看着女神发来的信息又撤回,可谓是心里痒痒啊.所以小编就写了一个 ...
- ## 用python 80行代码实现一个微信消息撤回捕捉功能
自从微信出了这个消息撤回功能小编我都已经快被折磨死了,小编本来就是个好奇心比较重的人,微信出了这个功能之后小编感觉身体一天不如一天了,每次看着女神发来的信息又撤回,可谓是心里痒痒啊.所以小编就写了一个 ...
最新文章
- sklearn pipeline_我的sklearn学习经验
- forward 和redirect的区别
- 初学Java Web(8)——过滤器和监听器
- 基于STM32的SPI基本介绍
- 【算法竞赛学习】心跳信号分类预测-数据分析
- POJ2190 HDU2714 ISBN
- SAP License:如何预防企业“癌症”
- Java排序之归并排序
- 采集屏幕编码H264
- Maven 菜鸟教程 4 常用dos命令
- Linux:什么是 i386、i586、 i686、noarch?
- 阿里巴巴2017实习面试
- 安装chrome第三方插件教程:(超详细)
- 计算机xp怎么做备份,怎么备份电脑系统?XP环境使用Ghost备份操作系统的步骤
- kinect游戏linux,两台kinect同时运行
- opengl 多边形线框_opengl基础学习专题 (三) 多边形绘制的几种样式
- 回忆--上海滩奋斗的日子
- php 8bit 10bit 解码,求助:我想把10bit的MKV压制成8bitMP4
- 浅谈 Linux 内核开发之网络设备驱动[转]
- 男生如何正确的识别绿茶婊
热门文章
- python不同文件函数调用_不同输入文件的多处理调用函数
- 视频中的目标检测与跟踪综述
- vim编写python没有代码提示_vim编写python自动补全
- lock交替打印_面试题Synchronized实现两个线程交替打印
- qstring 字符相同 不相等_我的编程手册 -- Java 基础篇·字符串 String
- excelutil java_JAVA实现Excel的读取--ExcelUtil工具类
- 20211004 矩阵的子空间
- django之jquery完成ajax
- 在Spring Controller中将数据缓存到session
- ThinkPHP3.2 G函数代码及 使用方法