QQ 邮箱模拟登陆操作

# 1. 访问 xlogin 接口(通过 QQ 邮箱登陆窗口的一个 iframe 可以拿到)

xlogin

https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&appid=522005705&daid=4&s_url=https://mail.qq.com/cgi-bin/readtemplate?check=false%26t=loginpage_new_jump%26vt=passport%26vm=wpt%26ft=loginpage%26target=&style=25&low_login=1&proxy_url=https://mail.qq.com/proxy.html&need_qr=1&hide_border=1&border_radius=1&self_regurl=http://zc.qq.com/chs/index.html?type=1&app_id=11005?t=regist&pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input24e6b9.css

将访问上面地址得到的 cookie 保存起来(主要是 <font color="red">pt_login_sig</font > 后面会用到)

# 2. 访问 check 接口

https://ssl.ptlogin2.qq.com/check?js_ver=10233&js_type=1&login_sig=YBAgwC0mGS89sG93aXrkIdOrD00D-IALYfZ6vgC3SnedVVNm8HpMxHSlxqCG-PEN&pt_uistyle=25&regmaster=&pt_tea=2&pt_vcode=0&uin=xxxxxxx&appid=522005705&r=0.07185151645254728

参数说明:

参数说明
login_sig访问 xlogin 接口获取的 pt_login_sig cookie 值
uinQQ 号
r一个随机值

访问之后会得到

ptui_checkVC('0','!VJN','\x00\x00\x00\x00\x6f\x89\x5c\xec','804ea60e1c03c1c7003296522b0bbfaf53518ff2baab40b15fb55e28ca96d3d7786e6b44018c66adee5f409880b104412228363c2543619f','2')

注:
第一个值,0:不需要验证码,1:需要验证码;
第二个值,如果第一个值是 0 的话第二个值就是后面接口会用到的验证码
第三个值,QQ 号的 16 进制数
第四个值,后面接口所要用到的值
第五个值,后面接口需要回传的一个值(不知道有什么用)

# 3. 访问 https 登录接口(最麻烦最复杂的一步)

https://ssl.ptlogin2.qq.com/login?u=1871273196&verifycode=!GCU&pt_vcode_v1=0&pt_verifysession_v1=343af576e975768817b37e0b1c832ef30e7858b090ba460ee82b79efcb94b9bb2fd2b38ff0f02d6db63ad86fb3f795285035e9aec2f7bc2c&p=ZyA04zY*0fSKXAuOlKbYmQ0T*2g4cTwFJb88J0xN7HETYF5rEtqBaOxkAlacCM2d7F1b*cV90lwdY3NdZYZkWkHuZOF1xZz*O-777RaleT6hfdzaGW0zkbshs335NgRnKFLcI8S9qSerLmuMrAwlRtSn62yMxgDy-CokRBHlm4uL5IijuUkKpSxuL3pnfg7DGqWjvgb-Zrz1XfQ*q5N-tckwx3DmL3W2ItCsF3uxbjGZiYEy3i*hFHC0myQLhufO5KH0c8efeGKRNG8stJDDL8aB-bDCEqsxrgDirWg*zgNYyh0xIUMX2icxNZ**8ga97wQ76BfxLIsidwre0cfgCw__&pt_randsalt=2&u1=https%3A%2F%2Fmail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dloginpage%26target%3D%26account%3D1871273196&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&js_ver=10233&js_type=1&login_sig=YBAgwC0mGS89sG93aXrkIdOrD00D-IALYfZ6vgC3SnedVVNm8HpMxHSlxqCG-PEN&pt_uistyle=25&aid=522005705&daid=4

参数说明:

参数说明
uQQ 号
verifycode访问 check 接口得到的验证码
pt_verifysession_v1访问 check 接口得到的第四个值
p密码
login_sig访问 xlogin 接口获取的 pt_login_sig cookie 值
pt_randsalt访问 check 接口得到的第五个值

QQ 密码加密

密码加密需要调用到 QQ 的 c_login_2.js 这个文件里面的方法:

Encryption.getEncryption('pwd', 'salt', 'vcode', ismd5)

参数说明:

参数说明
pwdQQ 明文密码
saltQQ 号的 16 进制表示
vcode访问 check 接口得到的验证码
ismid5是否是 md5 密码(false)

源文件比较大可以把自己需要的部分提取出来

测试页面
js 源码

请求之后会得到如下类似结果

ptuiCB('0','0','https://ssl.ptlogin2.mail.qq.com/check_sig?pttype=1&uin=1871273196&service=login&nodirect=0&ptsigx=a6604498649a79f8407b06c171b50f73cdfc878de0436d71b8afa57d7e6c41ac755dbf49c0c17127482dbc1c4df7791eec4dc88cef1622fd36f092869f4341e6&s_url=https%3A%2F%2Fmail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dloginpage%26target%3D%26account%3D1871273196&f_url=&ptlang=2052&ptredirect=101&aid=522005705&daid=4&j_later=0&low_login_hour=0&regmaster=0&pt_login_type=1&pt_aid=0&pt_aaid=0&pt_light=0&pt_3rd_aid=0','1','登录成功!', 'PaPa')

# 4. 最后带上 cookie 请求登陆连接就可以登陆邮箱了