本文共 2358 字,大约阅读时间需要 7 分钟。
/**
* QQ邮箱登录流程(注意:要在一个HttpClient中完成,因为会保存cookie;否则必须传递cookie) * * 1. 取登录页 * * * 2. 取验证码页(注意:取验证码时,服务器发送回一个名verifysession的cookie,这个在请求登录时还要用到) * () * (aid可能是腾讯应用的id) * * 3.将以上取得的信息组成一个login页面,如下: * 1)需要下载tencent的js文件 * * 这个用于js中hex2b64()方法的实现 * 2)得到post action地址(域每次会变,因此要保留域的值,如:m123.mail.qq.com) * * 3)得到RSA相关Key(以下是qq web login页相关的代码) * PublicKey,PublicTs 可以从的结果中得到 * 此代码用来给pp(页面上用于填充密码,在提交时用于密码的掩码)填充值,并生成加密的密码(p域) * <pre> * var PublicKey = "CF87D7B4C864F4842F1D337491A48FFF54B73A17300E8E42FA365420393AC0346AE55D8AFAD975DFA175FAF0106CBA81AF1DDE4ACEC284DAC6ED9A0D8FEB1CC070733C58213EFFED46529C54CEA06D774E3CC7E073346AEBD6C66FC973F299EB74738E400B22B1E7CDC54E71AED059D228DFEB5B29C530FF341502AE56DDCFE9"; var RSA = new RSAKey(); RSA.setPublic(PublicKey, "10001"); var PublicTs="1257819936"; var Res = RSA.encrypt(document.form1.pp.value + '/n' + document.form1.ts.value + '/n'); if (Res) { document.form1.p.value = hex2b64(Res); } var MaskValue = ""; for (var Loop = 0; Loop < document.form1.pp.value.length; Loop++, MaskValue += "0"); document.form1.pp.value = MaskValue; * </pre> * 4)表单域 * sid=0,2,zh_CN [常量] * firstlogin=false [一般为false,是否第一次登录] * starttime [开始时间, tencent js中document.form1.starttime.value = (new Date()).valueOf();] * redirecturl [可以为空] * f=html [常量] * p [真实的密码域(js得到),计算见js] * delegate_url [可以为空] * s [可以为空] * ts [时间戳,和js中PublicTs是同一个值] * from [可以为空] * uin [QQ号] * pp [页面中的密码域,在提交时由js变成为掩码,全为0,计算见js,掩码位数同密码的位数] * verifycode [所填入的验证码] * aliastype [邮箱域,常量? @qq.com] * * 4. 真正的登录验证 * * 在登录成功后,会有一个页面(这是个跳转页面),要取出sid,后面每个链接都要sid * <pre> * <html> <title>QQ邮箱</title> <script> var urlHead=""; var targetUrl=""; var mailto=""; targetUrl = urlHead + "frame_html?sid=QZwGDj90yKVccHow"; if (targetUrl == "") { targetUrl = "" != "" ? "" : "/cgi-bin/loginpage"; } if (targetUrl.indexOf("?") != -1) { targetUrl+="&r=f8bdd91785667fd0f67f992a08aac239"; } document.write("<META http-equiv=Refresh content=/'0; url=/"" + targetUrl + "/"/'/>"); </script> <script type="text/javascript"> location.replace( targetUrl ); </script> </html> * </pre> * 5. 取好友 * 利用上面的sid * 取QQ+邮箱好友 * * 取QQ好友 * * 取邮箱好友? * * 取常用联系人/不常用(common/uncommon) * * * 6.变化 * 1)换了新的验证码链接,是把验证码分布多台机器,某台机器只能验证这台机器的验证码 * 因此, * 这样的链接得到的验证码是不对的 * 应该先得到相应的domain(如:m158.mail.qq.com),再组成验证码链接 * 形如: * */
/**
* QQ错误代码 * 在页面中以 errtype=1 形式出现,同时在页面中找不到sid * 1 -- 密码错误 * 2 -- 验证码错误 * 17 -- 登录太多次 */转载地址:http://dofmd.baihongyu.com/