博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过HTTP抓取QQ好友过程
阅读量:2791 次
发布时间:2019-05-13

本文共 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/

你可能感兴趣的文章
python基础教程-北大学霸自学这套Python教程,7天开发12款游戏,堪称宝藏教程
查看>>
这个为生信学习打造的开源 Python 文字教程真香!!!
查看>>
送书 | 数据分析如烹小鲜
查看>>
机不可失,时不再来
查看>>
从1.0到4.0,详解直播平台“IM系统”搭建全攻略
查看>>
Grumpy:Google开源神器Go上运行Python
查看>>
RabbitMQ中实现延时消息
查看>>
如何快速高效的学习技术
查看>>
MQ中消息重复消费及解决
查看>>
云原生时代下的监控
查看>>
使用 BulkLoad 向 HBase 中批量导入数据
查看>>
谷歌失败案例赏析:那些年在微服务上踩的坑
查看>>
线上故障处理原则
查看>>
技术管理主要做什么?
查看>>
什么才是软件开发中最佳实践呢?
查看>>
大数据平台日志存储分析系统解决方案
查看>>
二叉树的基本操作
查看>>
C语言经典编程题
查看>>
OCR之端到端任意形状的场景文字识别 ICCV2019 End-to-End Text Spotting
查看>>
一种值得借鉴的RPN:GARPN | Region Proposal by Guided Anchoring
查看>>