Node模拟登录的技术实现与案例介绍

shellzhang

2015-12-27

概述

1. 动机,为什么做这件事

2. 可能的技术难题

3. Node中可以利用的技术

4. 具体案例分析

5. 做类似事情的方法介绍

动机,why

1. 第三方的平台不能提供可靠的API,为我们所用

2. 人工操作繁琐,负责的说——凤巢后台基本不是给人用的

可能的技术难点

1. 需要验证码的输入

2. 登录流程逻辑复杂

3. token的刷新

Node中的技术点

1. Request模块,模拟HTTP请求。

2. 结合CookieJar,维护Cookie的状态

3. Request + Socks5,通过代理访问

4. PhantomJS && CasperJS

3.1 PhantomJS —— a headless WebKit scriptable with a   JavaScript API.

3.2 CasperJS —— an open source navigation scripting & testing utility written in Javascript for the PhantomJS

具体案例分析——凤巢

难点

  • 需要验证码
  • 登录验证过程中,前端逻辑复杂(需要一个RSA加密的过程)

解决方案:

  • 验证码:验证码模拟 + 人工干预
  • 前端复杂逻辑:分析源码,将关键方法直接copy+paste,这也是语言统一保持一致的优势
  • Cookie持久化
  • 定期刷新Token(避免过期而导致的人工参与验证码输入)
  • 短信报警,通知Token过期

具体案例分析——广点通

难点

  • 可能会有验证码
  • g_tk计算
  • 文件下载,attachment方式

解决方案:

  • 源码分析,找到g_tk计算方法
  • g_tk依赖的skey,从登录成功的cookie中获取
  • 登录流程复杂,request模拟过于复杂,尝试用PhantomJS,可以解决,但是……
  • 文件下载PhantomJS支持不理想,改用CasperJS,成功,且流程更清晰

做类似事情的方法

  1. 逆向分析:看登录情况下,触发什么下载请求。再分析请求参数,以及生成这些参数的依赖。理解流程,再寻找合适的工具,真正有挑战的事情在这里
  2. 善用DevTools中的Network + Source
  3. 能用Phantom或者CasperJS的,尽量先用,避免第三方平台代码逻辑的调整带来的影响
  4. Log Everywhere and Alarm when necessary!
  5. 还需要一丢丢的运气……

Thanks && QA

利用Node进行账户登录的案例介绍

By shellzhang

利用Node进行账户登录的案例介绍

本文通过实际案例,介绍了利用Node及其相关技术,实现百度凤巢后台登录,以及qq账号登录的方法,以及在利用Node进行账号登录中需要注意的问题点。

  • 891