今天帮一个朋友写投票机程序,使用了WebClient类,但是因为整个投票过程不是一次点击就可以完成的,过程大致如下:
    首先要提交一个类似注册的链接,然后再提交一个过渡链接,并根据过渡链接返回页面数据中的一个含随机数的链接做出投票提交。在整个过程中需要保持Session
    一开始直接使用WebClient的DownloadString方法来达到点击效果,并获取页面数据,但如果两次调用之间不考虑Session问题将无法通过服务器的验证。通过使用HttpWatch工具观察三次点击过程中提交到服务器的http头以及服务器返回的Res发现其中有一个"Set-Cookie"的属性,其值形式为:"JSESSIONID=XXXXXX",于是通过WebClient.ResponseHeaders["Set-Cookie"]属性获得SessionID,并附加到下一次链接提交的HttpHead中实现了在WebClient的两次提交中保持Session
    代码如下:

 1WebClient webClient = new WebClient();
 2string srcString = webClient.DownloadString(tarurl1);
 3string header = webClient.ResponseHeaders["Set-Cookie"];
 4webClient.Headers.Add("Content-Type", "text/html");
 5webClient.Headers.Add("Cookie",header);//在给服务器发送消息时加上这个Session
 6webClient.Headers.Add("Referer", tarurl1);
 7srcString = webClient.DownloadString(tarurl2);
 8int index = srcString.IndexOf(tar);
 9string synid = srcString.Substring(index + tar.Length, 13);
10tarurl3 += synid;
11string tmp = srcString.Substring(index + tar.Length, srcString.Length-index-tar.Length);
12int itmp = tmp.IndexOf("点击率:");
13int toll = GetToll(tmp.Substring(itmp, 100)) + 1;
14statusStrip1.Items[0].Text = "票数:" + toll;
15webClient.Headers.Add("Content-Type", "text/html");
16webClient.Headers.Add("Cookie", header);//在给服务器发送消息时加上这个Session
17webClient.Headers.Add("Referer", tarurl2);
18srcString = webClient.DownloadString(tarurl3);

其中第2行为获取第一次点击内容,第3行是获得SessionID,第5行就是附加SessionID到第二次链接;8、9、10是获得随机数,11、12、13获得票数;15、16、17、18是完成投票。其中6、17只是添加一个引用头,不知道是否是必须的。
    需要说明的是,此方法对于有验证码的登录方式是无效的。而且第一次链接是一个DownloadString方法来实现类似登录的功能,之所以不是POST,是因为服务器并没有对此要求太严格,否则要用到UpdateData方法了。

转载于:https://www.cnblogs.com/jishu/archive/2009/04/04/1940122.html

在WebClient类中保持Session相关推荐

  1. java 普通类request_[Java教程]spring在普通类中获取session和request

    [Java教程]spring在普通类中获取session和request 0 2014-08-12 08:01:13 在使用spring时,经常需要在普通类中获取session,request等对像. ...

  2. java 普通类获取session_如何在Java的普通类中获取Session以及request对象

    展开全部 你是指你的 web 项目中使用到一个工具性的类,它的e69da5e6ba9062616964757a686964616f31333337613865形参中没有 HttpRequest 或 H ...

  3. 普通类创建获取session 方式_Springboot系列之RestApi中获取枚举类属性的几种方式...

    前言 我们在日常开发中经常会遇到,实体类中的枚举属性,在通过@ResponseBody注解返回到前端后,默认被解析成了枚举对象的name值,当我们需要获取枚举类的详细属性时就会变得非常麻烦,今天给大家 ...

  4. Tomcat5集群中的SESSION复制详解

    Tomcat 5服务器为集群和SESSION复制提供了集成的支持.本系列的第一篇文章将为大家提供SESSION持久性以及TOMCAT集群中SESSION复制的 内在工作机制一个概要认识.我将会讨论SE ...

  5. ashx页面中context.Session[xxx]获取不到值的解决办法

    1.在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString( ...

  6. Tomcat中的Session小结

    什么是Session 对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap: Session的目的 Http协议是一种无状态协议,即每次服务端 ...

  7. 利用WebClient类向服务器上载文件(转孟子的)

    利用WebClient类向服务器上载文件(转孟子的) 今天看了TERRYLEE老大的一篇写上传的.里面有个WEBCLIENT我就上网查了一下,找到孟子大人的一篇文章.感觉不错,就转了过来.大家一起学习 ...

  8. 在一般处理程序(handler)中获取session的方法

    这些天做用户实施警告系统 其中在完成时时监控的时候 ,由于需要时时监控网站的所有用户信息 但是在一般处理程序中想要获取session状态但是抛出异常说上下文中不存在session 在 aspx和asp ...

  9. 后盾网lavarel视频项目---2、phpstorm显示类中的方法快捷键

    后盾网lavarel视频项目---2.phpstorm显示类中的方法快捷键 一.总结 一句话总结: ctrl + f12 1.npm安装js插件? npm install hdjs 2.phpstor ...

  10. Spring中获取Session的方法汇总

    Spring: web.xml <listener> <listener-class>org.springframework.web.context.request.Reque ...

最新文章

  1. excel粘贴时出现故障_了解这些信息,你会知道在ESXi5.0 的虚拟化系统下文件出现故障时,我们能做些什么?...
  2. 独家 | 改善AI性别偏见的4种方法
  3. 动态二维数组赋值及for循环遍历和toString遍历
  4. 当今世界最受人们重视的十大经典算法
  5. 椭圆曲线加密算法ECC
  6. 苹果的程序员三大定律
  7. ExtJs Grid分页时序号自增的实现,以及查询以后的序号的处理
  8. Android - Glide4.4.0使用
  9. 2022年顺顺顺,送3本技术好书借你千里风
  10. vscode如何关闭Pylint警告或错误提示
  11. 5岁儿童自学python编程-为什么外国5岁孩子就要学编程?原因你一定想知道
  12. bui框架与php结合,bui框架前端自定义配色基础属性
  13. 2021百度之星程序设计大赛-初赛一部分题目总结
  14. OA系统四级模块编写测试用例(用户模块)
  15. 小郡肝火锅点餐系统——测试部署发布
  16. 给网页添加背景图片 html+css
  17. 办理北京市工作居住证攻略
  18. Qt之简易的多功能小相册
  19. 艰涩难懂,不存在的,消息队列其实很简单
  20. 【企业微信急速救心丸】(一)第三方应用开发 - Java整合企业微信回调

热门文章

  1. 康托展开逆展开算法笔记
  2. Redis-慢查询分析
  3. [Linux学习]更改默认启动图形界面或命令行
  4. [转]UML建模的要点总结
  5. List小心性能损失的方法
  6. 【TDA4系列】通过MCU域的R5F1_0启动全部核心MAIN域核心(R5F DSP A73)
  7. 【翻译】 Video Object Tracking using Improved Chamfer Matching and Condensation Particle Filter
  8. Oracle数据库出现问题时,这十个脚本帮你快速定位原因
  9. SpringMVC类型转换、数据绑定详解
  10. 导入虚拟机vmware,此主机支持Intel VT-x,但Intel VT-x处于禁用状态和黑屏