这个元旦假期过的比较奇怪,为了向远方的GF表示忠诚。除了1号和同学吃了个大锅饭之外,尽量做到了大门不出二门不迈,躲在闺房守岁:)。
在家闲着也不能干闲着,总得做点事情,想起前段时间一个师兄交代给我的任务:把若干个串在一起。X国的政策一向比较Bt,你说开个群还要限制人数。H大在深圳有几千校友,一个群怎么可能放的下那么多人。好多在tx工作的师兄,明确告诉:我买通tx的人是不大可能了,搞一个传话筒才是解决之道。
事情虽小,但也着实麻烦。你说要去分析QQ具体数据包,万一哪天tx一高兴把数据给改了,或者接口开放了,也够我郁闷一壶的了。那就找个最简单的办法吧,左一顿baidu,又一顿google. “QQ接口”搜出来的结果绝大多数是关于tx qq的http接口,既然大家那么推崇,那我就从Http接口下手,于是把我以前写的AJAX给拆了,在把所谓的qq接口研究成果给鼓捣在一起,然后去webqq( http://webqq.qq.com)上大抢一遍,那家伙,天昏地暗,相当的&(&(。
代码我是用script写的:
在家闲着也不能干闲着,总得做点事情,想起前段时间一个师兄交代给我的任务:把若干个串在一起。X国的政策一向比较Bt,你说开个群还要限制人数。H大在深圳有几千校友,一个群怎么可能放的下那么多人。好多在tx工作的师兄,明确告诉:我买通tx的人是不大可能了,搞一个传话筒才是解决之道。
事情虽小,但也着实麻烦。你说要去分析QQ具体数据包,万一哪天tx一高兴把数据给改了,或者接口开放了,也够我郁闷一壶的了。那就找个最简单的办法吧,左一顿baidu,又一顿google. “QQ接口”搜出来的结果绝大多数是关于tx qq的http接口,既然大家那么推崇,那我就从Http接口下手,于是把我以前写的AJAX给拆了,在把所谓的qq接口研究成果给鼓捣在一起,然后去webqq( http://webqq.qq.com)上大抢一遍,那家伙,天昏地暗,相当的&(&(。
代码我是用script写的:
异步AJAX会话类
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1//异步AJAX会话类
2if(typeof(AjaxSession)=='undefined')
3varAjaxSession=function(){
4
5//创建会话
6this.CreateSession=function()
7{
8if(window.ActiveXObject){//IE
9try{
10returnnewActiveXObject('Microsoft.XMLHTTP');
11}catch(e){}
12
13try{
14returnnewActiveXObject('Msxml2.XMLHTTP');
15}catch(ee){}
16}else{//Mozilla,Safari
17vars=newXMLHttpRequest();
18if(s.readyState==null){
19s.readyState=1;
20s.addEventListener("load",function(){
21s.readyState=4;
22if(typeof(s.onreadystatechange)=="function")
23s.onreadystatechange();
24},false);
25}
26
27returns;
28}
29
30returnnull;
31}
32
33//进行请求
34this.Request=function(url,params,callback)
35{
36
37vars=this.CreateSession();
38if(null==s)
39alert("对不起,您的浏览器不支持某些特性。");
40else
41s.abort();
42
43varisAsync=typeof(callback)=='function';
44varmethod=!params?"GET":"POST";
45
46if(isAsync)s.onreadystatechange=function()
47{
48try{
49alert(s.status);
50if((4==s.readyState)&&(200==s.status||304==s.status))
51callback(this.Response(s));
52else
53alert("请求错误,错误原因:"+s.statusText);
54}catch(e){}
55}
56
57s.open(method,url,isAsync);
58s.setRequestHeader("Connection","Keep-Alive");
59s.setRequestHeader("Content-Type","text/html;charset=gb2312");
60//s.setRequestHeader("Content-Type","text/plain;charset=UTF-8");
61
62if(method=="POST")
63{
64s.setRequestHeader("Content-Length",params.length)
65s.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
66
67}
68
69alert(params);
70s.send(params);
71
72
73if(!isAsync)
74returnthis.Response(s);
75}
76
77//返回应答信息
78this.Response=function(s)
79{
80if(s.status==200||304==s.status)
81{
82if(s.responseXML!=null&&s.responseXML.xml!=null&&s.responseXML.xml!='')
83returns.responseXML;
84else
85returns.responseText;
86}
87}
88
89//对字符串进行编码
90this.UncCoding=function(s)
91{
92varoutput='';
93for(vari=0;i<s.length;i++){
94output=output+'%'+s.charCodeAt(i);
95}
96
97returnoutput;
98}
99
100//获取xml结构
101this.GetDom=function(s){
102vardoc=newActiveXObject('Microsoft.XMLDOM');
103doc.async=false;
104doc.loadXML(s);
105returndoc;
106}
107
108returnthis;
109}
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1//异步AJAX会话类
2if(typeof(AjaxSession)=='undefined')
3varAjaxSession=function(){
4
5//创建会话
6this.CreateSession=function()
7{
8if(window.ActiveXObject){//IE
9try{
10returnnewActiveXObject('Microsoft.XMLHTTP');
11}catch(e){}
12
13try{
14returnnewActiveXObject('Msxml2.XMLHTTP');
15}catch(ee){}
16}else{//Mozilla,Safari
17vars=newXMLHttpRequest();
18if(s.readyState==null){
19s.readyState=1;
20s.addEventListener("load",function(){
21s.readyState=4;
22if(typeof(s.onreadystatechange)=="function")
23s.onreadystatechange();
24},false);
25}
26
27returns;
28}
29
30returnnull;
31}
32
33//进行请求
34this.Request=function(url,params,callback)
35{
36
37vars=this.CreateSession();
38if(null==s)
39alert("对不起,您的浏览器不支持某些特性。");
40else
41s.abort();
42
43varisAsync=typeof(callback)=='function';
44varmethod=!params?"GET":"POST";
45
46if(isAsync)s.onreadystatechange=function()
47{
48try{
49alert(s.status);
50if((4==s.readyState)&&(200==s.status||304==s.status))
51callback(this.Response(s));
52else
53alert("请求错误,错误原因:"+s.statusText);
54}catch(e){}
55}
56
57s.open(method,url,isAsync);
58s.setRequestHeader("Connection","Keep-Alive");
59s.setRequestHeader("Content-Type","text/html;charset=gb2312");
60//s.setRequestHeader("Content-Type","text/plain;charset=UTF-8");
61
62if(method=="POST")
63{
64s.setRequestHeader("Content-Length",params.length)
65s.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
66
67}
68
69alert(params);
70s.send(params);
71
72
73if(!isAsync)
74returnthis.Response(s);
75}
76
77//返回应答信息
78this.Response=function(s)
79{
80if(s.status==200||304==s.status)
81{
82if(s.responseXML!=null&&s.responseXML.xml!=null&&s.responseXML.xml!='')
83returns.responseXML;
84else
85returns.responseText;
86}
87}
88
89//对字符串进行编码
90this.UncCoding=function(s)
91{
92varoutput='';
93for(vari=0;i<s.length;i++){
94output=output+'%'+s.charCodeAt(i);
95}
96
97returnoutput;
98}
99
100//获取xml结构
101this.GetDom=function(s){
102vardoc=newActiveXObject('Microsoft.XMLDOM');
103doc.async=false;
104doc.loadXML(s);
105returndoc;
106}
107
108returnthis;
109}
//QQ会话类
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1//会话类
2if(typeof(QQSession)=='undefined')
3varQQSession=function(){
4this.UIN=0;
5this.Md5PasswordStr="";
6this.WebQQUrl="http://tqq.tencent.com:8000/";
7this.qs=null;
8this.isLogin=false;
9this.SeqIndex=null;
10
11//用户登陆
12this.Login=function(uin,passwd,vcode,qs){
13varm5=newMD5();
14this.UIN=uin;
15this.Md5PasswordStr=m5.calcMD5(passwd);
16varCmdStr="VER=1.0&CMD=1&SEQ="+this.GetNewSEQ()+"&UIN="+uin+"&PS="+this.Md5PasswordStr+"&STATUS=10&VCODE="+vcode+"&QQSESSION="+qs;
17
18//if(!this.qs)
19//this.qs=newAjaxSession();
20window.frames["proxy"].request(this.WebQQUrl,CmdStr);
21//this.qs.Request(this.WebQQUrl,CmdStr,this.ShowMsg);
22
23//document.getElementById("ssl_login").callback=this.ShowMsg;
24//document.getElementById("ssl_login").src="https://webqq-proxy.qq.com/webqq/l?"+CmdStr;
25}
26
27//用户信息
28this.GetInfo=function(){
29varCmdStr="VER=1.0&CMD=10&SEQ="+this.GetNewSEQ()+"&UIN="+this.UIN+"&FUIN="+this.UIN;
30this.qs.Request(this.WebQQUrl,CmdStr,this.ShowMsg);
31//window.frames["proxy"].request(this.WebQQUrl,CmdStr);
32}
33
34
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1//会话类
2if(typeof(QQSession)=='undefined')
3varQQSession=function(){
4this.UIN=0;
5this.Md5PasswordStr="";
6this.WebQQUrl="http://tqq.tencent.com:8000/";
7this.qs=null;
8this.isLogin=false;
9this.SeqIndex=null;
10
11//用户登陆
12this.Login=function(uin,passwd,vcode,qs){
13varm5=newMD5();
14this.UIN=uin;
15this.Md5PasswordStr=m5.calcMD5(passwd);
16varCmdStr="VER=1.0&CMD=1&SEQ="+this.GetNewSEQ()+"&UIN="+uin+"&PS="+this.Md5PasswordStr+"&STATUS=10&VCODE="+vcode+"&QQSESSION="+qs;
17
18//if(!this.qs)
19//this.qs=newAjaxSession();
20window.frames["proxy"].request(this.WebQQUrl,CmdStr);
21//this.qs.Request(this.WebQQUrl,CmdStr,this.ShowMsg);
22
23//document.getElementById("ssl_login").callback=this.ShowMsg;
24//document.getElementById("ssl_login").src="https://webqq-proxy.qq.com/webqq/l?"+CmdStr;
25}
26
27//用户信息
28this.GetInfo=function(){
29varCmdStr="VER=1.0&CMD=10&SEQ="+this.GetNewSEQ()+"&UIN="+this.UIN+"&FUIN="+this.UIN;
30this.qs.Request(this.WebQQUrl,CmdStr,this.ShowMsg);
31//window.frames["proxy"].request(this.WebQQUrl,CmdStr);
32}
33
34