这方面的文章多得很,我这里把一些细节说一下。

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系统)相关推荐

  1. ❤️Java实现模拟QQ(消息通信+登陆界面美化)❤️

    一.登陆界面的实现 登陆界面主要使用了JFrame,以及相关的一些组件,并且在界面中加上监听 登陆界面效果图 登陆界面代码Login类 package com.lding.login;import c ...

  2. # python模拟各大网站登陆方式, 包括爬虫--你们要的全都有

    python模拟各大网站登陆方式,以及一些爬虫程序 仅供练习使用,代码注释很详细 走过路过的大佬们,记得给个star支持一下,嘻嘻嘻? 收集了一些各大网站登陆方式, 和一些网站的爬虫程序,有的是通过s ...

  3. 用Java程序模拟银行ATM机,实现包括存款、取款、查询、转账功能的简单应用

    (1)想象现实世界中的相关操作沙及哪些实体呢?一个是储户,一个是ATM机.因 此根据面向对象中的抽象原则,可将其抽象为两个类:代表储户的账户信息类,代表银行 ATM机的ATM类.外加一个主类(负责实例 ...

  4. QQ登陆功能的实现2

    QQ登陆功能的实现2 由于看到园子里有朋友说需要讲解和剖析实现的步骤,前面的QQ登陆实现只有代码,所以这篇补上 1.  分析 1). 当运行QQ.exe后会出现qq登陆界面的窗体 2). 我们用spy ...

  5. 综合演练 实现登陆功能 1124

    综合演练 实现登陆功能 1124 目标 本项目需要有两个窗体, 其中第1个窗体用于登录,如果登录成功,那么跳转到第2个窗体, 在第2个窗体当中,显示用户的一些简单的信息,作为登录成功的一个模拟. 如果 ...

  6. 三星S10指纹识别玩脱了!多家金融APP关闭指纹登陆功能

    近日,三星Galaxy S10等设备的指纹识别安全漏洞问题引发全球关注,尽管三星官方发布声明将发布补丁修复该问题,目前国内外多家金融机构已采取措施,关闭涉及相关机型的指纹登录功能. 此前据外媒报道,一 ...

  7. 用javascript实现以下功能!_用python80行代码实现一个微信消息撤回捕捉功能

    自从微信出了这个消息撤回功能小编我都已经快被折磨死了,小编本来就是个好奇心比较重的人,微信出了这个功能之后小编感觉身体一天不如一天了,每次看着女神发来的信息又撤回,可谓是心里痒痒啊.所以小编就写了一个 ...

  8. 用Python 80行代码实现一个微信消息撤回捕捉功能

    自从微信出了这个消息撤回功能小编我都已经快被折磨死了,小编本来就是个好奇心比较重的人,微信出了这个功能之后小编感觉身体一天不如一天了,每次看着女神发来的信息又撤回,可谓是心里痒痒啊.所以小编就写了一个 ...

  9. ## 用python 80行代码实现一个微信消息撤回捕捉功能

    自从微信出了这个消息撤回功能小编我都已经快被折磨死了,小编本来就是个好奇心比较重的人,微信出了这个功能之后小编感觉身体一天不如一天了,每次看着女神发来的信息又撤回,可谓是心里痒痒啊.所以小编就写了一个 ...

最新文章

  1. sklearn pipeline_我的sklearn学习经验
  2. forward 和redirect的区别
  3. 初学Java Web(8)——过滤器和监听器
  4. 基于STM32的SPI基本介绍
  5. 【算法竞赛学习】心跳信号分类预测-数据分析
  6. POJ2190 HDU2714 ISBN
  7. SAP License:如何预防企业“癌症”
  8. Java排序之归并排序
  9. 采集屏幕编码H264
  10. Maven 菜鸟教程 4 常用dos命令
  11. Linux:什么是 i386、i586、 i686、noarch?
  12. 阿里巴巴2017实习面试
  13. 安装chrome第三方插件教程:(超详细)
  14. 计算机xp怎么做备份,怎么备份电脑系统?XP环境使用Ghost备份操作系统的步骤
  15. kinect游戏linux,两台kinect同时运行
  16. opengl 多边形线框_opengl基础学习专题 (三) 多边形绘制的几种样式
  17. 回忆--上海滩奋斗的日子
  18. php 8bit 10bit 解码,求助:我想把10bit的MKV压制成8bitMP4
  19. 浅谈 Linux 内核开发之网络设备驱动[转]
  20. 男生如何正确的识别绿茶婊

热门文章

  1. python不同文件函数调用_不同输入文件的多处理调用函数
  2. 视频中的目标检测与跟踪综述
  3. vim编写python没有代码提示_vim编写python自动补全
  4. lock交替打印_面试题Synchronized实现两个线程交替打印
  5. qstring 字符相同 不相等_我的编程手册 -- Java 基础篇·字符串 String
  6. excelutil java_JAVA实现Excel的读取--ExcelUtil工具类
  7. 20211004 矩阵的子空间
  8. django之jquery完成ajax
  9. 在Spring Controller中将数据缓存到session
  10. ThinkPHP3.2 G函数代码及 使用方法