通过HTTP抓取QQ好友过程
来源:互联网 发布:淘宝定制的可以退货吗 编辑:程序博客网 时间:2024/05/22 14:16
/**
* QQ邮箱登录流程(注意:要在一个HttpClient中完成,因为会保存cookie;否则必须传递cookie)
*
* 1. 取登录页
* http://mail.qq.com/cgi-bin/loginpage
*
* 2. 取验证码页(注意:取验证码时,服务器发送回一个名verifysession的cookie,这个在请求登录时还要用到)
* http://ptlogin2.qq.com/getimage?aid=23000101&Math.random()
* (aid可能是腾讯应用的id)
*
* 3.将以上取得的信息组成一个login页面,如下:
* 1)需要下载tencent的js文件
* http://rescdn.qqmail.com/zh_CN/htmledition20091109/js/safeauth.js
* 这个用于js中hex2b64()方法的实现
* 2)得到post action地址(域每次会变,因此要保留域的值,如:m123.mail.qq.com)
* http://m123.mail.qq.com/cgi-bin/login?sid=0,2,zh_CN
* 3)得到RSA相关Key(以下是qq web login页相关的代码)
* PublicKey,PublicTs 可以从http://mail.qq.com/cgi-bin/loginpage的结果中得到
* 此代码用来给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. 真正的登录验证
* http://m151.mail.qq.com/cgi-bin/login?sid=0,2,zh_CN
* 在登录成功后,会有一个页面(这是个跳转页面),要取出sid,后面每个链接都要sid
* <pre>
* <html>
<title>QQ邮箱</title>
<script>
var urlHead="http://m135.mail.qq.com/cgi-bin/";
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+邮箱好友
* http://m151.mail.qq.com/cgi-bin/addr_listall?sid=Y74I8cCPs94nFB5U&category=all
* 取QQ好友
* http://m151.mail.qq.com/cgi-bin/addr_listall?sid=Y74I8cCPs94nFB5U&category=qq
* 取邮箱好友?
*
* 取常用联系人/不常用(common/uncommon)
* http://m151.mail.qq.com/cgi-bin/addr_listall?sid=Y74I8cCPs94nFB5U&category=common
*
* 6.变化
* 1)换了新的验证码链接,是把验证码分布多台机器,某台机器只能验证这台机器的验证码
* 因此,
* http://mail.qq.com/cgi-bin/getverifyimage?aid=23000101&0.38779593481782704 这样的链接得到的验证码是不对的
* 应该先得到相应的domain(如:m158.mail.qq.com),再组成验证码链接
* 形如:http://m158.mail.qq.com/cgi-bin/getverifyimage?aid=23000101&0.38779593481782704
*
*/
/**
* QQ错误代码
* 在页面中以 errtype=1 形式出现,同时在页面中找不到sid
* 1 -- 密码错误
* 2 -- 验证码错误
* 17 -- 登录太多次
*/
- 通过HTTP抓取QQ好友过程
- android QQ空间,QQ好友分享 SDK具体使用过程
- 通过QQ小秘书与任意好友聊天的源程序
- Python通过HTTP协议定期抓取文件
- Python通过HTTP协议定期抓取网页
- python3 [爬虫入门实战] 爬虫之selenium 模拟QQ登陆抓取好友说说内容(暂留)
- qq好友克隆-转好友
- QQ好友签名大全
- 转移QQ好友列表
- 恢复qq好友
- 添加qq好友
- 实现QQ 好友列表
- 仿QQ好友列表
- QQ好友列表
- qq好友列表 模拟
- 山寨QQ好友列表
- 获取QQ好友列表
- 练习:QQ 好友列表
- Theme
- Exchange Server 2010 初体验......
- CreateProcess函数的用法
- 开始
- cover letter 转
- 通过HTTP抓取QQ好友过程
- 用程序生成程序
- 那些过去的
- 字符转换 dos 命令 JDK自带的native2ascii工具
- 菜鸟学习OGRE和天龙八部之十八: 获得档案(Archive)文件列表
- IT餐馆—第二十四回 明智
- 孤独
- asp.net 第三方控件列表
- 句句经典