这里参考了QQ登录的组件

1
http://ui.ptlogin2.qq.com/cgi-bin/login?hide_title_bar=0&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=636014201&target=self&s_url=http%3A//www.qq.com/qq2012/loginSuccess.htm

登录组件

QQ登录有两种情况,一种是需要验证码,一种是不需要验证码。需要验证码的稍微复杂一点,这里首先介绍一下不需要验证码的情况。

一、无需验证码

第一步:获取 login_sig

这是登录所需要的第一步,无论是否需要验证码,都需要进行这一步。
访问如下地址:

1
http://ui.ptlogin2.qq.com/cgi-bin/login?hide_title_bar=0&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=636014201&target=self&s_url=http%3A//www.qq.com/qq2012/loginSuccess.htm

从返回的Cookie中获取 pt_login_sig的值,这个值就是login_sig

获取login_sig的值

第二步:获取 checkVC

这个字符串中包含了多个内容。有是否输入验证码的标志、verifycode、salt和pt_verifysession_v1(不需要输入验证码的情况下)。
请求地址:

1
http://check.ptlogin2.qq.com/check?regmaster=&pt_tea=2&pt_vcode=1&uin=QQ号码&appid=636014201&js_ver=10197&js_type=1&login_sig=GsmtnCcla5xHKS********T0U0npqlnD4bzXEMed&u1=http%3A%2F%2Fwww.qq.com%2Fqq2012%2FloginSuccess.htm&r=0.23528769960244944&pt_uistyle=40

其中参数uin是登录的qq号码,login_sig是从第一步获取的值。
获取check_vc
当然这种情况是在QQ号输入正确,并且不需要输入验证码时。
返回的内容如下:

1
ptui_checkVC('0','!BAF','\x00******\x64\x21\x97\x92','e9825f1e232302e01414bf9c37ac7d44942a40c89daaf5604ab11d54fff32445ad89e315e30a610e0aa77f46afedbaad83819c14230e7ec2','2');

第一个值表示是否需要图片验证码,0表示不需要
第二值是verifycode,登录时需要
第三个值是salt,QQ转换而来
第四个值是pt_verifysession_v1

第三步:登录

输入密码后点登录,请求包为:

1
http://ptlogin2.qq.com/login?u=QQ号码&verifycode=!BAF&pt_vcode_v1=0&pt_verifysession_v1=e9825f1e232302e01414bf9c37ac7d44942a40c89daaf5604ab11d54fff32445ad89e315e30a610e0aa77f46afedbaad83819c14230e7ec2&p=w79Tqqx2glOF9meNNWhz5Ouow23EGt3zEl-y8vpVGFuHT6HJaFtRhVDlbpMj4a6plyrnIvW73uGXzVDwSt2e9wMHyFt9crtZ-N0xUx2wxFUen03ybw5HxzkPti3VyjSffID8GNkhDn1yYVPa1lyjHED2DCVd3rl9bysBPb*1imLSYY3jkQJpsXPS2kjxxlVxFBVHEHnSGSYaA3QBMXQ*NyQw7MkhVDsO7X8aljR0eApa*lgHoBsC4g3mTtEKcU5aslpcO4EPdUey0QA4YVh9zLzbLnkPJklcQYvoxlv6kLdYmoyORcVTM6IKqles7t5ot0mRWzjW923hV3X0PLRb6g__&pt_randsalt=2&u1=http%3A%2F%2Fwww.qq.com%2Fqq2012%2FloginSuccess.htm&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=4-8-1488010172151&js_ver=10197&js_type=1&login_sig=GsmtnCcla5xHKSrRZ7ek0VU5-63oyUvqLk65vxoIG0kOFBT0U0npqlnD4bzXEMed&pt_uistyle=40&aid=636014201&
参数名称 说明
u 用户输入。第二步骤中 uin的值
verifycode 第二步中ptui_checkVC第二个值。(这里的是!BAF)
pt_verifysession_v1 第二步中ptui_checkVC第四个值。即e9825f1….
p 加密后的密码
login_sig 第一步中返回Cookie中的 pt_login_sig值
pt_randsalt pt_randsalt=0 旧版加密 ;pt_randsalt=2 新版RSA加密

密码加密的js代码地址http://imgcache.qq.com/ptlogin/ver/10197/js/c_login_2.js,注意看js版本,这里是js_ver为10197

密码加密需要三个参数,第一个是pwd(用户密码),第二个是salt(第二步中获取ptui_checkVC 中的第三个值),第三个是verifycode(第二步中ptui_checkVC第二个值 )

用户名密码正确返回:

1
ptuiCB('0','0','http://www.qq.com/qq2012/loginSuccess.htm','0','登录成功!', 'QQ昵称');

用户名密码错误返回:

1
ptuiCB('3','0','','0','您输入的帐号或密码不正确,请重新输入。', '');

附上一张登录成功的截图
无验证码登录成功

二、需要输入验证码

第一步:获取login_sig

与上面无需验证码一样,就省略了。

第二步:获取cap_cd

请求:

1
http://check.ptlogin2.qq.com/check?regmaster=&pt_tea=2&pt_vcode=1&uin=987654321&appid=636014201&js_ver=10197&js_type=1&login_sig=KVSX9JmFKqCXlNi85SLXJnj5DqKPDzAYGwW3X5d3Wcnxd885YPFSeDU7ul15aTQp&u1=http%3A%2F%2Fwww.qq.com%2Fqq2012%2FloginSuccess.htm&r=0.8539291708517738&pt_uistyle=40

返回

1
ptui_checkVC('1','yrAL1AMRbUpQGrsQxy6HMhVQ1YIf--U0zK5wNm_wTOYi2YIrxt5H5w**','\x00\x00\x00\x00\x3a\xde\x68\xb1','','2');

cap_cd的值为yrAL1AMRbUpQGrsQxy6HMhVQ1YIf--U0zK5wNm_wTOYi2YIrxt5H5w**

第三步:获取sess

请求:

1
http://captcha.qq.com/cap_union_new_gettype?aid=636014201&asig=&captype=&protocol=http&clientype=2&disturblevel=&apptype=2&curenv=inner&uid=987654321&cap_cd=yrAL1AMRbUpQGrsQxy6HMhVQ1YIf--U0zK5wNm_wTOYi2YIrxt5H5w**&lang=2052&callback=_aq_453849

uid是qq号,cap_cd由第二步获取

返回:

1
_aq_453849({"capclass":"0","subcapclass":"0","src":"cap_union_new_show","sess":"XiUr_hV-3RVfwQc2_01i1vZOI3BJdVr8AfA3-ZYIFztXD58CSfYICY_kwrJjpmvRtuAfMX50sJGC0c0D8W2kig**"})

第四步:获取visg

请求:

1
http://captcha.qq.com/cap_union_new_show?aid=636014201&asig=&captype=&protocol=http&clientype=2&disturblevel=&apptype=2&curenv=inner&sess=XiUr_hV-3RVfwQc2_01i1vZOI3BJdVr8AfA3-ZYIFztXD58CSfYICY_kwrJjpmvRtuAfMX50sJGC0c0D8W2kig**&noBorder=noborder&showtype=embed&uid=987654321&cap_cd=yrAL1AMRbUpQGrsQxy6HMhVQ1YIf--U0zK5wNm_wTOYi2YIrxt5H5w**&lang=2052&rnd=925999

获取visg

第五步:获取图片验证码

访问地址:

1
http://captcha.qq.com/cap_union_new_getcapbysig?aid=549000912&asig=&captype=&protocol=http&clientype=2&disturblevel=&apptype=2&curenv=inner&sess=” + sess + “&noBorder=noborder&showtype=embed&uid=” + uin + “&cap_cd=” + cap_cd + “&lang=2052&rnd=117715&rand=0.5497459754332915&vsig=” + vsig + “&ischartype=1

第六步:验证验证码,获取verifycode和pt_verifysession_v1

post请求:
http://captcha.qq.com/cap_union_new_verify?random=1488013134675

提交内容:

1
aid=636014201&asig=&captype=&protocol=http&clientype=2&disturblevel=&apptype=2&curenv=inner&sess=XiUr_hV-3RVfwQc2_01i1vZOI3BJdVr8AfA3-ZYIFztXD58CSfYICY_kwrJjpmvRtuAfMX50sJGC0c0D8W2kig**&noBorder=noborder&showtype=embed&uid=QQ号码&cap_cd=yrAL1AMRbUpQGrsQxy6HMhVQ1YIf--U0zK5wNm_wTOYi2YIrxt5H5w**&lang=2052&rnd=925999&subcapclass=0&vsig=g3GflfnCicbaqub3e-SVo2azImuo1gDzQfnGkRnhI-uqLlIXtY6XyXE1dDjUBJHOXCPewnnTo-4mPTtRjScTD9uZaPu4z3x1Jj6inepPQ8l8KCeFeN9laBpiWdqaOF4Eg&cdata=0&collect=OD6q9t0AraWJf%2Bdtq0j8VvuOrjmT8T%2F%2FW8E83RE208unUG0TO1T5psMsZH1p5SXS12WpjU2CcGKHMsp7fciMTLiLY3wUwJBjBxWSqfu%2FbhfCTKUtJdBPeE6P%2FsRfdwemWRYRQwRgdvXZuc42JOqfDIfD%2F2%2B2GeYYxOPohbqY%2BWcW%2Fcut%2BGLcKpJGFTzBtPzKDLU6fTPn6MC%2FNiRGWGehwTy52MK0dIVdd5BYlPQrhFrvrhaisRISHiH%2FhViF7iFpZm5ZclBD5rjqQ4r1O8%2BBDRSB4feMaP2S1Usd0uGrMnVFT8zX7dV7sT2Y1NQ%2Fk5%2FHP%2BgzBQgHMLuH%2FqdSBz%2Fu9wr7oT6Xb0edOUBjPrw55yhZM1R%2FxEJSNwap2f77XRxbJWH%2BFtEuWBC2Gve3MIn9L9loCqk%2Fe0XoGGy%2FuEDvHfEHRCchzaWKH3Hlr5MehOI4WaaPgmbj%2BBeSbcY%2BmDIc1TJ%2BhQmsRf5DoqlqiCuKNQLuX1XS1e3cnfM3%2BonkBImxaqx%2BlTG0HxWAV0Ntsn%2B0%2BeErZleVNI9VIZgIOHDxNkiaG3BucPL1SRuPNtgcNgGFpvYmFqTqPrR%2FgYDPobzlxy%2FcMVEALYB%2FogbH4gy%2FZP7xczjXypgdvtTawokxTUopmKyXVCwvA0coEQzWLW1EQfMsWPNZcA2p58oaelGA3FBlgkZ2iUnx4qukKEZQ7vKFie8VKFBelfNSp6aXcezYbnDbeFHYOAvLeXPriaZ5qBQzNADUtyj%2FhTsY%2BbvmnwCAGT%2F%2BMYeyd9VFWPEbR8cj%2FrRDEEWc0wdd5BOoHzix%2Bz2Uif9512VwHn9%2Bp3KXAnrK1O%2FQ6HRB7YS9BPyYQvW9ZtpvvKBwOIjf3fx7aqwYqfa7VUzMGv3zkvVA8Bp2JHG2GoQxnVa62ymP3SGshxS4l86ParjFNvepN16O1VaPAidFvqHRXAP14tHMkeC8VTFuqp5cKAY4UdXpPXukOvXPySbdFSPaaAqfIv7%2BckjxFsUPS4cauOx2jif2fQU2maxErLnwrZ10natNklynu5sUn9RSuRDld9v4TNTbyPShDdijM%2BzvpJoMyr4GWiFthB0kZZ2lVnPoqV67VQ%2FPiyCUA9zVbrLSAEOKIz1HQ19I0hdH41fBUPL824xYMdIO1AlZJKGre%2FCvUEgXaHgvbe83QNtFw%2BU946tlGVwR9TCCPltakqyKrT%2F8CtCZ6Mi0qfmFYnF8D7zZBaKxbNgTmMjvwAyz%2F0dMsDi97scJLMYV4w%2Fosk6gvoHEeX6LkbXh5W0aTYTznTSfO2RVfgzWpPiks6rVGzLhfwDyFAyH7%2FOHD7qEWGjnX3fTiBnw5%2FHWqHPJh3Kd%2F4EGe1yE3ZGzxo%2BPETGbcLQaQiiSAaQiFsU5UDoWG1%2FfOjd1Lkjg8D%2FNXuS1BkncxI2Hk%2B4xL0Xa1STqWJGieeyB5DOT9cHYUxEpw1g%3D&ans=ywhm

验证码输入正确返回:

1
{"errorCode":"0" , "randstr" : "@mDo" , "ticket" : "t026Dii9p2HtKBiYgHwRpwqXFrwWsI3-tta5rc7J3ELr5VgnaORdHXceHsZpmOl6JGRkEQYtUoeJs8KXWym7a0cxuw07929umE9cPo16UNyimo*" , "errMessage":"OK"}

verifycode为randstr,pt_verifysession_v1为ticket

第七步: 验证用户名密码是否正确

请求:

1
http://ptlogin2.qq.com/login?u=987654321&verifycode=@mDo&pt_vcode_v1=1&pt_verifysession_v1=t026Dii9p2HtKBiYgHwRpwqXFrwWsI3-tta5rc7J3ELr5VgnaORdHXceHsZpmOl6JGRkEQYtUoeJs8KXWym7a0cxuw07929umE9cPo16UNyimo*&p=A*CEx2PsoaZAYQe7D-5dLmTxdorqI9asO37Wugp2KFHzeEqYpMPh9CHPk7DDzZw5UzD4y1in-ZrSoXLx5kJYe1WGZ7sqhg*ZNJ3DtQ65rXR*I5i*dCAQ-h1fFV*u3AdP8IFAAu*borH*xSYbFZDTQ8TjplD2wan2w8MnDfo3h1AyUL*kpt79FqpCfuXnlaSOyTOzkMceEQczxw5DYzmZDetbMeJMYhoqLhQ0WHxbHUafhOEk1EhBDiqXvfETJvCmSMubGN7W*LIF3JPoYFDOgJmmPWqauGvw7C03ehesfIzeNtm-m5R*QX8HyM4dPp*dc3lRUxF2rMuBPn9EVzaqpg__&pt_randsalt=2&u1=http%3A%2F%2Fwww.qq.com%2Fqq2012%2FloginSuccess.htm&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=5-24-1488013134992&js_ver=10197&js_type=1&login_sig=KVSX9JmFKqCXlNi85SLXJnj5DqKPDzAYGwW3X5d3Wcnxd885YPFSeDU7ul15aTQp&pt_uistyle=40&aid=636014201&

带验证码登录可能存在问题,待修改

易语言实现代码