Java 模拟 58登录 (一) 分析

标签(空格分隔): Java


实习期间需要做一个模拟58登录然后爬取简历,第一次做项目遇到很多坑
同时网上关于58登录的又没有很多资料,遇到了很多坑,这里记录一下,方便自己以及他人学习

源代码放在Github
有关实现的分析,可以参考我的另一篇博客 Java 模拟58登录(二) 实现

前言

这里是通过手机动态码的方式来登录58, 而非帐号密码, 适用于第三方网站登录使用
原因是模拟密码登录的时候, 当我用其他人账号在我这里登录58的时候就会出现账号登录限制
需要手机动态码验证之后才可以登录,所以决定直接手机动态码的登录。

如果你知道这里的机制或者知道如何避免,请告知我liangxianfeng96@qq.com

分析

一 记录Http Request请求

首先是登录58, 查看登录期间的Http Request请求

其中,connect和clientid对我们模拟登录没有影响
可以发现大致的流程如下

  • 发送Get请求(data?), 获取 token
  • 发送Get请求(getcode?), 请求发送手机验证码, 同时获得一个tokencode
  • 发送Get请求(login?), 输入手机号,动态码以及其他相关参数来发送登录请求
  • 登录成功

二 查看Http Request请求详细内容

1 查看登录Js代码

我们先看下登录的关键js代码,看都需要哪些参数

            function codeCommitLogin() {loginClickLog("from=PC_login_sj_dlqq");$("#loginMobileButton").attr("disabled", "disabled");var source = $("#source").val();var mobile = $("#loginMobile").val();var mobilecode = $("#loginMobilecode").val();var validatecode = $("#validatecodeMobile").val();var token = $("#tokenMobile").val();var tokencode = $("#tokencodeMobile").val();var path = $("#path").val();var rsaModulus = $("#rsaModulusMobile").val();var rsaExponent = $("#rsaExponentMobile").val();var timesign = (new Date).getTime() + timespan;var isremember = $("#isremember_id_new_mobile").prop("checked");var fingerprint = "";if (typeof fingerPrint != "undefined") {fingerprint = fingerPrint.get()}if (typeof Fingerprint2 != "undefined") {var fp = new Fingerprint2;var finger2 = fp.get()} else {var finger2 = ""}var p = encryptString(timesign + encodeURIComponent(mobile), rsaExponent, rsaModulus);var url = "//passport.58.com/mobile/pc/login?callback=?&mobile=" + p + "&mobilecode=" + mobilecode + "&source=" + source + "&token=" + token + "&tokencode=" + tokencode + "&fingerprint=" + fingerprint + "&isremember=" + isremember + "&finger2=" + finger2 + "&path=" + path;$.getJSON(url, function(result) {codeSuccessCommitLoginFunction(result)})}

2 参数分析

  • 这里的话,finger2和fingerprint是唯一确定浏览器的参数,每个浏览器都有不同的值
    这里直接从浏览器拷贝,没有影响
  • timeSpan时间戳, 表示的是整个登录的时间+常数1411093327735
  • 密文p, 是timesign + encodeURIComponent(mobile)的密文,rsaModulus 和 rsaExponent ,加密参数,58一直不变
  • 其他参数直接和request请求一致,或者酌情设置

3 获取token

请求的URL

Request URL:https://passport.58.com/frontend/data?callback=jQuery18308426383909637498_1515994624659&_=1515994624692

Response

jQuery18305434571389149673_1515995590691({“code”:0,“data”:{“remainTime”:0,“token”:“7pjUnv6fhBONHh7A_4HrN_2rH4is-gC8”,“rsaModulus”:“xxx固定值xxx”,
“rsaExponent”:“010001”,“totalTime”:60,“mobile”:“手机号”},“msg”:""})

如上,其中callback参数中jQuery18308426383909637498_1515994624659和_=1515994624692,一个表示回调的函数+时间戳,一个应该是发送请求时候的时间戳,这里可以参考jquery资料

那么这个请求是页面刚加载就发送的请求,从response可以看出主要是获取token参数

4 获取tokencode

Request URL

https://passport.58.com/mobile/getcode?

参数

Response

jQuery18305434571389149673_1515995590693({“code”:0,“data”:{“exist”:0,“tokencode”:“GhxN2kozUcU8wsbkzGXbMmst8G4_0sSg”},“msg”:“动态码已发送”})

5 发送login请求

Request URL

https://passport.58.com/mobile/pc/login?

参数

Response

jQuery18305434571389149673_1515995590693({“code”:0,“data”:{“fingerprint”:“84E63543A0E4DF048727E0037314879E66AE767A7311EA8C”},“msg”:“成功”})

以上便是整个登录的流程

三 总结

由于是第一次做Java项目,很多都不懂而且前期公司网不好半天才能刷出个界面,然后导致这个功能做了很久.
最初我试着用selenium框架去模拟登录,但是!!!公司网络不行并且我觉得这样效率太慢了就没有进行下去,后面转入Java模拟登录
前期很多时间都放在了去读Js代码,手动模拟添加部分cookie,以及模拟java加密过程,其实这三个后面发现都是在做无用功
然后自己登录成功后发现其他人账号不能登录,又转到手机动态码登录。。。

做这个功能最大的体会就是,做项目先不要深入的去了解某一个环节(这里我花了几天都在读js代码,Java模拟js加密),应该显示着做出一个最简单的demo,遇到问题再去学习解决

最后这个模拟登录还是很在很多问题,希望有了解的人可以告诉应该怎么做才最好

Java 模拟58登录相关推荐

  1. Java 模拟58登录(二) 实现

    Java 模拟58登录(二) 实现 标签(空格分隔): Java 实习期间需要做一个模拟58登录然后爬取简历,之前已经写了一篇分析,现在具体实现过程 有关过程的分析,可以参考我的另一篇博客 Java ...

  2. java 模拟登录58同城_Java 模拟58登录(二) 实现

    实现 流程 根据之前的分析可以得出58登录的大致流程如下发送Get请求(data?), 获取 token 发送Get请求(getcode?), 请求发送手机验证码, 同时获得一个tokencode 发 ...

  3. java模拟微博登录_Python模拟微博登陆,亲测有效

    今天想做一个微博爬个人页面的工具,满足一些不可告人的秘密.那么首先就要做那件必做之事!模拟登陆-- 我对代码进行了优化,重构成了Python 3.6 版本,并且加入了大量注释方便大家学习. PC 登录 ...

  4. java 模拟get登录_java 模拟get请求

    原码 /** * GET页面的内容 * * @param cityMsg * @return 返回HTML源代码 */ private  String getHtmlCode(String url,S ...

  5. appium java模拟微信登录,python实战之结合Appium自动化操作微信

    本教程操作环境:win7系统,JDK1.8,Appium,Python3.7,android-sdk,JDK,模拟器 1.Appium介绍 Appium是一个开源的自动化测试工具,其支持iOS和安卓平 ...

  6. java模拟网银登录_用java编写模拟网上银行登录及存取款业务

    展开全部 public class Account { protected String accId; protected String name; protected double money; p ...

  7. 微信群控系统制作系列一——java模拟登录网页版微信

    PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...

  8. 使用Java模拟登录

    使用Java模拟登录 运行环境 步骤 浏览器阶段 思路 编码 使用python模拟登录 运行环境 本次开发在Windos上进行,运行环境为: java 11.0.2 2019-01-15 LTS Ja ...

  9. JAVA模拟淘宝、天猫登录

    有时候需要对淘宝.天猫平台进行频繁操作,会触发平台风控,需要我们登陆之后才能进行操作,或者有些功能淘宝开放平台并没有提供api接口,只能通过人工登录进行操作,但是频繁的人工操作比较浪费时间.因此对于模 ...

最新文章

  1. Camel之AsyncProcessor
  2. npjsba-2018-用肠道微生物模型指导个性化膳食缓解局部性肠炎
  3. 3、Python字典集合
  4. C语言操作符(又称运算符)(2)
  5. spark广播变量的使用(转)
  6. SQL对Xml字段的操作
  7. drool 7.x 属性 : no-loop
  8. 手机软件APP下载类网站Pbootcms模板 游戏软件应用网站源码 模板自适应手机端
  9. wxid转扫一扫协议加好友
  10. Android8怎么格式化内存卡,安卓手机怎么格式化内存卡
  11. SQLSERVER2012备份日志报错:”读取失败: 23(数据错误(循环冗余检查)。)”
  12. 病毒全攻略:我是怎样让你感冒的
  13. css3 简单的动画实现欢乐愉快的小鱼
  14. 学位计算机考试成绩怎么查询时间,湖北省自考00019计算机实践考试成绩在哪里查询...
  15. MACBOOKPRO操作系统登录密码忘记的解决方法
  16. unity3D游戏开发实战(四)——使用道具与密码锁
  17. JavaWeb——Servlet生命周期
  18. 微信小程序开发教程:项目五导航组件 课后习题
  19. Linux安装和入门
  20. Pytorch加载txt格式的数据集文件(以PTB数据集为例)

热门文章

  1. php引用http的页面,如何在HTTPS 网页中引入HTTP资源: Mixed Content?
  2. 江南天安科技俞华辰:谁动了我的网站
  3. 代替网易云的音乐软件(电脑端
  4. SQL Slammer 蠕虫卷土重来
  5. 蜗牛学院深度分析:为什么计算机专业的应届生找工作越来越难?
  6. 利用AdaBoost元算法提高分类性能
  7. 整理了101个对你绝对有用的 GitHub 仓库
  8. 黑马程序员_Propetties与配置文件
  9. 苹果iOS11开发者预览版Beta2更新内容和已知问题大全
  10. python -- 封装token