博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#模拟post消息,实现登陆功能(包括CAS系统)
阅读量:5278 次
发布时间:2019-06-14

本文共 1835 字,大约阅读时间需要 6 分钟。

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

1. 选用C#中的HttpWebRequest、HttpWebResponse和CookieContainer类。HttpWebRequest是用来提交web请求的,包括post和get;HttpWebResponse是用来接收服务器对本次请求的回复;CookieContainer是用来存放Cookie的集合,有些页面只有登录用户才能查看。这个时候就需要保存Cookie,以便使登录时建立的session保存下来这样服务器就会认为我们一直是登录状态了。

2. 在浏览器中正常登录一次,查看登录时的post信息。我推荐使用FireFox浏览器+HttpFox插件。主要是查看post字符串和提交的URL。比如登录上交葡萄(),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数据,冒充浏览器。当然这个过程中,不要关闭浏览器。第三种方法比较困难,需要设计图像处理和模式识别的算法,而且一旦一次提交错误,服务器会更新验证码图片。

    如果验证码是纯数字的,我的下一篇文章()或许能有所帮助。

转载于:https://www.cnblogs.com/wangchunming/archive/2012/04/02/2430157.html

你可能感兴趣的文章
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>