[size=large][color=blue]网站登陆分类[/color][/size]
[size=medium]
不考虑HTTPS,网站通过浏览器登陆大约可以分为如下几类
[list]
[*] 密码明文传输,用户在浏览器输入用户名密码,然后用明文传输到网站。人人网就是这种做法。
[*] 使用HTTP协议Authentication机制,一般网站使用的少。
[*] 使用JS对用户输入的密码进行处理,网络上不用传输明文密码了。开心001采用的这种做法。[/list] 另外: 有些网站也提供接口,让用户可以编写客户端来访问网站,例如amazon s3。
[/size]

[size=large][color=blue]开心001的登陆开发实践[/color][/size]

[size=medium]和人人一样,我在做开心001登陆开始的时候也是使用badboy录制登陆过程,用jmeter重放。发现登陆时并没有直接发送密码明文,而是用如下两个参数代替:[/size]
[quote]encypt
rpasswd[/quote]
[size=medium]猜测开心可能使用了一个encyptKey(encypt)对用户输入的密码进行处理,生成一个rpasswd。通过firebug追踪登陆过程,证实了这个猜想:[color=red]如果用户没有登陆,每次访问登陆页面时,服务器会发一个encyptKey到客户端,返回在网页里(保存成javascript变量的形式),用户输入密码并提交后,会运行一段js代码,这段代码会使用encyptKey对密码进行处理,生成rpasswd参数发送给服务器进行校验。[/color]由于每次访问登陆页面服务器返回的验证码不同,这就使得你在某次录制产生的参数下次就不能登陆。

发现这个问题后,尝试了如下解决方法:
[list]
[*] HTTPClient是否能够模拟点击按钮,也就是说用HTTPClient完全模拟用户登陆全过程。遗憾的是,HTTPClient并不支持这个功能。
[*] 是否有其它工具。HTTPUnit可以用了模拟用户点击,但是下载尝试以后,发现HTTPUnit并不好用,这条路没有尝试成功。
[*] 在java中实现开心001网页里js要实现的功能,也就是:首先分析出encyptKey,然后用这个encyptKey加上自己实现js功能部分产生rpasswd,再发送到服务器验证。但是开心001关于验证的js100多行,涉及大量位运算,在java里无bug的实现还是需要相当工作量的。
[*] 经过仔细考虑,想到: 如果在java里面可以调用js,那么直接调用js的功能产生rpasswd不就可以了吗? 很快就找到rhino这个工具,实践中这个工具非常好用,让人再一次感到了做java程序员的快乐 :)
[/list][/size]
[size=large][color=blue]最终的登陆流程[/color][/size]
[size=medium][list]

[*] 登陆页面,找到登陆页面中关于验证这块的js代码,并保存放到java可以访问的地方
[*] 访问登陆页面,从页面中分割出encyptKey
[*] 使用rhino访问前面保存的js,使用encyptKey产生服务器需要的参数rpasswd
[*] 向服务器发送参数进行验证
[/list][/size]
[size=medium]源码参考附件,运行前加一下开心的账号和密码。[/size]

[size=large][color=blue]验证码问题 (补充)[/color][/size]
[size=medium]上一个帖子里,很多人问到验证码问题,关于验证码,个人简单看法如下:
[list]
[*]很多大网站为了提高用户体验在用户第一次登陆时不要求用户输入验证码。只有在用户密码输入错误后,才会要求输入验证码。
[*]如果验证码是服务器端产生的,除了分析图片,也没有更好的方法,如果验证码是客户端产生的,比如: 使用js产生的,可以使用rhino来模拟得到这个验证码。
[*]一般来说,登陆后,大部分网页都可以访问,大部分操作都可以模拟。但是有些操作,比如说发文章,通常要求输入验证码,就比较难做到自动化。如果你发现哪个网站写文章不要去输入验证码,你就去写个机器人去刷屏吧,就象javaeye的问答频道一样 :)
[/list][/size]

[size=medium][color=red]注: Foxswily提供了一个更好的工具HTMLUnit,直接模拟点击网页,我没有实践过,建议大家可以试一下。
http://www.iteye.com/topic/644353

有人提到Selenium,这个我以前没有用过,看起来不错,有空可以试一下。
[/color][/size]

HTTPClient模拟登陆开心网001相关推荐

  1. 使用HttpClient模拟登陆并爬取网页

    在使用Java进行网页爬虫时经常需要携带登陆的 Cookie 信息,然而 Cookie 是有时效性的,所以经常会碰到 Cookie 失效的情况.如何在 Cookie 失效后自动重新获取成了爬虫急需解决 ...

  2. HttpClient模拟登陆

    HttpClient模拟登陆 httpclient登录新浪微博(非SDK方式) 分享此文章 苦逼的折腾了快一星期,总算把新浪微博rsa加密登录折腾ok了,这里需要注意的是httpclient最好用4. ...

  3. httpclient模拟登陆微博问题

    我用httpclient模拟登陆微博报如下错误: [DEBUG] RequestAddCookies - Cookie [version: 0][name: USRHAWB][value: usrmd ...

  4. Java--使用httpClient模拟登陆正方教务系统获取课表

    最近形如课程格子与超表课程表应用如雨后春笋般涌现,他们自动获取课程表是怎么实现的呢.于是我用Java实现了一下模拟登陆正方教务系统获取课表的过程. 首先,我们先了解一下网站登录的原理:当我们输入学号, ...

  5. 使用Httpclient模拟登陆正方软件股份有限公司开发的教务管理系统

    事先声明,我写这篇,只是为了分享一下,登录网站不止有使用cookies这一种方法,还有一种使用随机码的方法,并没有泄露"商业机密"的想法,本人才疏学浅,只是在站在巨人的肩膀上,摘到 ...

  6. 2019/1/6 初探JAVA京东 httpclient 模拟登陆(初篇)

    简述:(PS:  大神勿喷,接触爬虫较少) 最近与朋友聊天,关于京东上的业务,遇到某些烦恼,故有此需求,次需求针对性较强,翻来覆去也查阅不少资料. 分析细节 1. 京东账号分为,普通账户,企业账户,专 ...

  7. HTTPClient模拟登陆人人网

    目的: 使用HTTPClient4.0.1登录到人人网,并从特定的网页抓取数据. 总结&注意事项: HttpClient(DefaultHttpClient)代表了一个会话,在同一个会话中,H ...

  8. java使用httpclient简单模拟登陆微信公众开放平台

    注意:本文使用的不是微信公众平台的api,只是采用的模拟登陆的方式. 微信公众账号平台地址:https://mp.weixin.qq.com/ 1 分析登陆信息,获取url 使用谷歌浏览器打开http ...

  9. 豆瓣网络爬虫-java网络爬虫[验证码模拟登陆]详细介绍

    目录 抓包介绍 解决验证码的思路 验证码地址拼接 爬虫实战 爬虫架构 model main 解析htmlparse 数据库操作程序db 近期,有人将本人博客,复制下来,直接上传到百度文库等平台. 本文 ...

  10. 网络爬虫模拟登陆获取数据并解析实战(二)

    本文为原创博客,仅供学习使用.未经本人允许禁止复制下来,上传到百度文库等平台. 目录 分析要获取的数据 程序的结构 构建封装数据的model 模拟登陆程序并解析数据 结果展示 分析要获取的数据 下面继 ...

最新文章

  1. 【学习笔记】超简单的快速傅里叶变换(FFT)(含全套证明)
  2. 20130710--代码技巧
  3. .net core 源码解析-web app是如何启动并接收处理请求(二) kestrel的启动
  4. Servlet学习笔记(七)—— 自己定义过滤器的编写改进:自己定义实现FilterChain...
  5. lintcode:形状工厂
  6. 一键发布部署vs插件[AntDeploy]开源了
  7. archives_do.php,织梦后台文章管理中增加批量添加tag标签功能
  8. 你必须知道的几种java容器(集合类)
  9. ajax提交手机号到php,ajax怎样申请手机号到数据库验证并且返回数据的状态值
  10. pku 2186 Popular Cows (tarjan缩点)
  11. C#参考:Linq 概述
  12. [转]ASP.NET MVC中你必须知道的13个扩展点
  13. 在线教育源码可实现的功能
  14. oracle查看视图定义语句_oracle视图(oracle创建视图的sql语句)
  15. H264封装为FLV
  16. matlab如何根据历年gdp找增长规律,中国历年gdp数据图解 中国历年gdp增长率及人均GDP(1978年-2016年)...
  17. Ubuntu18.04 用一条命令 快速安装 FBReader
  18. Apache 安装虚拟主机
  19. java excel 饼图_Java 在 Excel 中创建饼图/环形图
  20. 下载频道2013上半年超人气精华资源汇总---全都是免积分下载

热门文章

  1. 美元升值对中国资产价格的影响
  2. VS2019 Xamarin.Android开发蓝牙通讯
  3. 《犹太人想的和你不一样》
  4. Python爬虫简介
  5. 服务器上的文件夹访问被拒绝,修改windows文件权限,解决“拒绝访问”或无法删除的问题-文件访问被拒绝...
  6. 遭遇难题,走投无路到成功解决的心路历程 —— ORA12514:监听程序当前无法识别连接描述符中请求的服务
  7. wordpress 搭建的博客: 增加网站备案信息
  8. 系统分析和设计方法之输出设计和原型化
  9. 翻译:软件测试的未来五个趋势
  10. 几分钟搞定,文件名称中文转英文