﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Dorian's Blog-随笔分类-Other</title><link>http://www.blogjava.net/dorian/category/5911.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:09:53 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:09:53 GMT</pubDate><ttl>60</ttl><item><title>RFC 3261 - SIP: Session Initiation Protocol</title><link>http://www.blogjava.net/dorian/archive/2006/03/01/32986.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Wed, 01 Mar 2006 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2006/03/01/32986.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/32986.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2006/03/01/32986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/32986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/32986.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Network Working Group                                       J. RosenbergRequest for Comments: 3261                                   dynamicsoftObsoletes: 2543                                         ...&nbsp;&nbsp;<a href='http://www.blogjava.net/dorian/archive/2006/03/01/32986.html'>阅读全文</a><img src ="http://www.blogjava.net/dorian/aggbug/32986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2006-03-01 11:28 <a href="http://www.blogjava.net/dorian/archive/2006/03/01/32986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QQ的HTTP接口探究</title><link>http://www.blogjava.net/dorian/archive/2005/12/12/23482.html</link><dc:creator>Dorian's Blog</dc:creator><author>Dorian's Blog</author><pubDate>Mon, 12 Dec 2005 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/dorian/archive/2005/12/12/23482.html</guid><wfw:comment>http://www.blogjava.net/dorian/comments/23482.html</wfw:comment><comments>http://www.blogjava.net/dorian/archive/2005/12/12/23482.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/dorian/comments/commentRss/23482.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorian/services/trackbacks/23482.html</trackback:ping><description><![CDATA[来自:http://blog.donews.com/zwell/archive/2005/08/22/520301.aspx<BR><BR>１、研究说明 <BR><BR>　　Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口，通过这个接口，可以进行一些基本的操作，如：登陆、登出、改变登陆状态(上线、忙碌、离线、隐身)、添加删除好友、查看好友信息、发送验证信息(接受被加为好友、申请加对方为好友、拒绝被加为好友)、收发用户消息、系统信息。 <BR><BR>　　目前我研究的是1.1版本的HTTP&nbsp;QQ协议，研究是微程在的成果上进行的，不敢说有什么超越，只不过更为详细和准确。 <BR><BR>２、接口说明： <BR><BR>　　接口位置：tqq.tencent.com:8000 <BR>　　通信协议：HTTP <BR>　　数据传输方法：POST <BR>　　HTTP请求格式： <BR><BR>POST&nbsp;HTTP/1.1 <BR>Host:&nbsp;tqq.tencent.com:8000 <BR>Content-Type:&nbsp;text/plain;&nbsp;charset=UTF-8 <BR>Content-length:&nbsp;长度 <BR>Connection:&nbsp;close <BR><BR>数据 <BR><BR>　　其中长度为&nbsp;数据&nbsp;的长度，数据的格式： <BR>　　VER=1.1&amp;CMD=命令&amp;SEQ=标记&amp;UIN=QQ号&amp;.... <BR><BR>　　以上４个参数是每个请求都必有的。其中，VER表示协议的版本，目前为1.1，据说1.2已经出来了，这个乱写的话，服务器返回NULL； CMD为操作的指令，有Login、List、Query_Stat、GetInfo、AddToList、Ack_AddToList、 DelFromList、Change_Stat、GetMsgEx、CLTMSG、Logout；SEQ为当前请求的标记，防止重复发送，可以用当前时间，也可以用随机数；UIN是当前执行操作的QQ号。不过不同的CMD还需要不同的参数，下面我就公布我的研究成果。 <BR><BR>３、研究方法： <BR><BR>　　我对目前网上的资料不够满意，就自己写程序，发送多条相同CMD不同参数的请求，根据服务器的返回，来做判断。感兴趣的朋友可以参考一下，此处可以跳过。 <BR>　　下面我公布我探测的代码(PHP)： <BR><BR>[code:1:1bbf2dec18] <BR>&lt;? <BR>$uin&nbsp;=&nbsp;"QQ号"; <BR>$pwd&nbsp;=&nbsp;md5("QQ密码"); <BR><BR>//登陆测试 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=1&amp;LC=9326B87B234E7235"; <BR>//注意：登陆测试不能同时进行，必须等到服务器认为QQ断开了，才能够测试，不然结果不可信 <BR>/******* <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=0&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=1&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=2&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M5=3&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M6=1&amp;LC=9326B87B234E7235"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Login&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;PS=".$pwd."&amp;M6=1&amp;LC=1223423545756679"; <BR>*******/ <BR><BR><BR>//得到好友列表 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=List&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=106814"; <BR><BR>//得到在线列表 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=160&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=".rand(1,200)."&amp;UN=0"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=".rand(1,10); <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Query_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;TN=0&amp;UN=106814"; <BR><BR>//查看好友信息 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=0&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=1&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=2&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=3&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=4&amp;UN=106814"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetInfo&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;LV=5&amp;UN=106814"; <BR><BR>//增加好友 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814"; <BR><BR>//发送验证 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=0&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=1&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=2&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=3&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=4&amp;RS=TEST"; <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;CD=5&amp;RS=TEST"; <BR><BR>//删除好友 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=DelFromList&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814"; <BR><BR>//改变状态 <BR>for($i=0;$i&lt;=60;$i=$i+5) <BR>{ <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Change_Stat&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;ST=".$i; <BR>} <BR><BR>//获得消息 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=GetMsgEx&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin.""; <BR><BR>//发送消息 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=CLTMSG&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin."&amp;UN=106814&amp;MG=TEST"; <BR><BR>//登出 <BR>$poststring[]&nbsp;=&nbsp;"VER=1.1&amp;CMD=Logout&amp;SEQ=".rand(1000,9000)."&amp;UIN=".$uin.""; <BR><BR>$file&nbsp;=&nbsp;fopen("p.txt","w"); <BR><BR>foreach($poststring&nbsp;as&nbsp;$k=&gt;$v) <BR>{ <BR>ss_timing_start(); <BR>$fp&nbsp;=&nbsp;fsockopen('tqq.tencent.com',&nbsp;'8000',&nbsp;$errno,&nbsp;$errstr,&nbsp;$timeout&nbsp;=&nbsp;10);&nbsp; <BR><BR>if(!$fp){&nbsp; <BR>&nbsp;//error&nbsp;tell&nbsp;us&nbsp; <BR>&nbsp;$content&nbsp;=&nbsp;$k.chr(13).chr(10)."ERROR:$errstr&nbsp;($errno)";&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>}else{&nbsp; <BR><BR>&nbsp;&nbsp;//send&nbsp;the&nbsp;server&nbsp;request&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;"POST&nbsp;HTTP/1.1\r\n");&nbsp; <BR>//&nbsp;&nbsp;fputs($fp,&nbsp;"Host:&nbsp;$host\r\n");&nbsp; <BR>//&nbsp;&nbsp;fputs($fp,&nbsp;"Content-type:&nbsp;application/x-www-form-urlencoded\r\n");&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;"Content-length:&nbsp;".strlen($v)."\r\n");&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;"Connection:&nbsp;close\r\n\r\n");&nbsp; <BR>&nbsp;&nbsp;fputs($fp,&nbsp;$v&nbsp;.&nbsp;"\r\n\r\n");&nbsp; <BR><BR>&nbsp;&nbsp;//loop&nbsp;through&nbsp;the&nbsp;response&nbsp;from&nbsp;the&nbsp;server&nbsp; <BR>&nbsp;&nbsp;$res&nbsp;=&nbsp;""; <BR>&nbsp;&nbsp;while(!feof($fp))&nbsp;{&nbsp; <BR>&nbsp;&nbsp;&nbsp;$res&nbsp;.=&nbsp;fgets($fp,&nbsp;4096);&nbsp; <BR>&nbsp;&nbsp;}&nbsp; <BR>&nbsp;&nbsp;//close&nbsp;fp&nbsp;-&nbsp;we&nbsp;are&nbsp;done&nbsp;with&nbsp;it&nbsp; <BR>&nbsp;&nbsp;fclose($fp);&nbsp; <BR><BR>&nbsp;&nbsp;$content&nbsp;=&nbsp;$v.chr(13).chr(10).$res; <BR>}&nbsp; <BR>ss_timing_stop();&nbsp; <BR>$content&nbsp;.=&nbsp;chr(13).chr(10)."Time:&nbsp;".ss_timing_current().chr(13).chr(10)."--------------------------------------".chr(13).chr(10); <BR>fputs($file,$content); <BR>} <BR>fclose($file); <BR>?&gt; <BR>&lt;? <BR>function&nbsp;ss_timing_start&nbsp;($name&nbsp;=&nbsp;"default")&nbsp;{&nbsp; <BR>global&nbsp;$ss_timing_start_times;&nbsp; <BR>$ss_timing_start_times[$name]&nbsp;=&nbsp;explode('&nbsp;',&nbsp;microtime());&nbsp; <BR>}&nbsp; <BR>function&nbsp;ss_timing_stop&nbsp;($name&nbsp;=&nbsp;"default")&nbsp;{&nbsp; <BR>global&nbsp;$ss_timing_stop_times;&nbsp; <BR>$ss_timing_stop_times[$name]&nbsp;=&nbsp;explode('&nbsp;',&nbsp;microtime());&nbsp; <BR>}&nbsp; <BR>function&nbsp;ss_timing_current&nbsp;($name&nbsp;=&nbsp;"default")&nbsp;{&nbsp; <BR>global&nbsp;$ss_timing_start_times,&nbsp;$ss_timing_stop_times;&nbsp; <BR>if&nbsp;(!isset($ss_timing_start_times[$name]))&nbsp;{&nbsp; <BR>return&nbsp;0;&nbsp; <BR>}&nbsp; <BR>if&nbsp;(!isset($ss_timing_stop_times[$name]))&nbsp;{&nbsp; <BR>$stop_time&nbsp;=&nbsp;explode('&nbsp;',&nbsp;microtime());&nbsp; <BR>}&nbsp; <BR>else&nbsp;{&nbsp; <BR>$stop_time&nbsp;=&nbsp;$ss_timing_stop_times[$name];&nbsp; <BR>}&nbsp; <BR>$current&nbsp;&nbsp;=&nbsp;&nbsp;$stop_time[1]-$ss_timing_start_times[$name][1];&nbsp; <BR>$current&nbsp;+=&nbsp;$stop_time[0]-$ss_timing_start_times[$name][0];&nbsp; <BR>return&nbsp;$current;&nbsp; <BR>}&nbsp; <BR>?&gt; <BR>[/code:1:1bbf2dec18] <BR><BR>４、研究成果： <BR><BR>(1).登陆 <BR>　　说明：在你做任何其他操作以前，你必须登陆。只有在登陆以后，你的其他指令才有可能被正确执行(返回RES=0)，不然服务器会返回RES= 20，不过有个例外，就是logout。当你成功登陆以后，服务器就会根据你的IP*和参数中的UIN来验证身份。一台电脑可以同时登陆多个QQ，互不影响，就是因为有参数UIN。 <BR>　　*至于我能够确定服务器是通过IP来验证的，是因为服务器不可能通过我的请求获得其他信息了^_^ <BR><BR>　　提交数据：VER=1.1&amp;CMD=Login&amp;SEQ=标记&amp;UIN=QQ号&amp;PS=QQ密码&amp;M5=1&amp;LC=9326B87B234E7235 <BR>　　说明：QQ密码是通过md5加密的字符串，在PHP中可以直接用md5()进行加密； <BR>　　　　　M5这个参数的作用还不清楚，但最好为1。 <BR>　　　　　LC这个参数有点神秘，不能有丝毫改动，不然服务器就没有响应(没有响应就是返回NULL)。 <BR><BR>　　返回：VER=1.1&amp;CMD=LOGIN&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;RS=0&amp;HI=60&amp;LI=300(成功) <BR>　　　　　VER=1.1&amp;CMD=LOGIN&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;RS=1&amp;RA=密码错误(密码错误) <BR>　　　　　VER=1.1&amp;CMD=LOGIN&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=5(QQ号非法，如100) <BR>　　　　　NULL(UIN为字符、PS为空、LC错误) <BR><BR>(2).得到好友列表 <BR>　　提交数据：VER=1.1&amp;CMD=List&amp;SEQ=标记&amp;UIN=QQ号&amp;TN=160&amp;UN=0 <BR>　　说明：TN、UN还不清楚具体表示什么，但是TN的值会影响返回的结果，有没有UN对结果没有影响 <BR><BR>　　返回：VER=1.1&amp;CMD=LIST&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FN=9(当TN=0或没有TN参数时，FN表示好友数) <BR>　　　　　VER=1.1&amp;CMD=LIST&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FN= 1&amp;SN=9&amp;UN=3814526,...,(当TN存在且非0时，FN=1，SN表示好友数，UN为好友列表，用","分割) <BR>　　　　　VER=1.1&amp;CMD=LIST&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、TN、UN为字符) <BR><BR>(3).得到在线好友列表 <BR>　　提交数据：VER=1.1&amp;CMD=Query_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;TN=50&amp;UN=0 <BR>　　说明：TN、UN还不清楚具体表示什么，但是TN的值会影响返回的结果，有没有UN对结果没有影响 <BR><BR>　　返回：VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES= 0&amp;FC=0,&amp;FN=1&amp;SN=1&amp;ST=10,&amp;UN=106814,&amp;NK=Hackfan&nbsp; 好,(当TN存在且非0时，FN=1，SN表示在线好友数，FC、ST、UN、NK的值用','分割，分别表示头像、状态、号码、昵称) <BR>　　　　　VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、TN、UN为字符) <BR>　　说明：FC为QQ头像的的ID，如的头像ID为270，那么其头使用的图片为91.bmp,其算法为ID/3+1； <BR>　　　　　ST为QQ用户的状态，10为上线，20为离线(或隐身)，30为忙碌； <BR><BR>　　特别说明：当参数TN=0或不存在时，服务器返回： <BR>VER=1.1&amp;CMD=Query_Stat&amp;SEQ=标记&amp;UIN=QQ号 <BR>HTTP/1.1&nbsp;200&nbsp;OK <BR>Server:&nbsp;tencent&nbsp;imserver/1.0.0 <BR>Content-Type:&nbsp;text/plain;&nbsp;charset=UTF-8 <BR>Content-Length:&nbsp;56 <BR><BR>VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FN=1 <BR>HTTP/1.1&nbsp;200&nbsp;OK <BR>Server:&nbsp;tencent&nbsp;imserver/1.0.0 <BR>Content-Type:&nbsp;text/plain;&nbsp;charset=UTF-8 <BR>Content-Length:&nbsp;77 <BR><BR>VER=1.1&amp;CMD=QUERY_STAT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;FC=&amp;FN=1&amp;SN=0&amp;ST=&amp;UN=&amp;NK= <BR>　　返回了２次，第一次的结果中，FN为在线好友数，第二次返回的数据基本没用。 <BR><BR>(4).查看好友信息 <BR>　　提交数据：VER=1.1&amp;CMD=GetInfo&amp;SEQ=标记&amp;UIN=QQ号&amp;LV=查询类型&amp;UN=被查询QQ号码 <BR>　　说明：LV=0,1为精简查询，LV=2为普通查询，LV&gt;=3为详细查询 <BR><BR>　　返回：VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;LV=0&amp;UN=106814&amp;NK=Hackfan&nbsp;好(精简查询) <BR>　　　　　VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;AD =地址&amp;AG=19&amp;EM=hackfan@qq.com&amp;FC=0&amp;HP=http: //blog.hackfan.net&amp;JB=学生 <BR>&amp;LV=2&amp;PC=邮编&amp;PH=电话&amp;PR= The&nbsp;guy&nbsp;is&nbsp;updating&nbsp;to&nbsp;.NET&nbsp;Frameword......&amp;PV=江苏&amp;RN=胡吉阳&amp;SC= 毕业院校&amp;SX=0&amp;UN=106814&amp;NK=Hackfan&nbsp; <BR>好(普通查询) <BR>　　　　　VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;AD =地址&amp;AG=19&amp;BT=2&amp;CO=6&amp;CT=苏州&amp;CV=%01&amp;CY=中华人民共和国 <BR>&amp;EM=hackfan@qq.com&amp;FC=0&amp;HP=http://blog.hackfan.net&amp;ID =-&amp;JB=学生&amp;LV=3&amp;MO=136********&amp;MT=0&amp;MV=&amp;PC=邮编&amp; PH=电话&amp;PR=The&nbsp;guy&nbsp;is&nbsp; <BR>updating&nbsp;to&nbsp;.NET&nbsp;Frameword......&amp;PV=江苏&amp;RN=胡吉阳&amp;SC=毕业院校&amp;SH=3&amp;SX=0&amp;UN=106814&amp;NK=Hackfan&nbsp;好(详细查询) <BR>　　　　　VER=1.1&amp;CMD=GETINFO&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、LV、UN为字符) <BR><BR>　　说明：AD为联系地址 <BR>　　　　　AG为年龄 <BR>　　　　　BT为血型 <BR>　　　　　CO为星座 <BR>　　　　　CT为城市 <BR>　　　　　CV为未知* <BR>　　　　　CY为国家 <BR>　　　　　EM为Email <BR>　　　　　FC为头像 <BR>　　　　　HP为网站 <BR>　　　　　ID为未知 <BR>　　　　　JB为职业 <BR>　　　　　LV为查询代码(就是发送的LV) <BR>　　　　　MO为移动电话 <BR>　　　　　MT为未知 <BR>　　　　　MV为未知 <BR>　　　　　PC为邮编 <BR>　　　　　PH为联系电话 <BR>　　　　　PR为简介 <BR>　　　　　PV为省 <BR>　　　　　RN为真实姓名 <BR>　　　　　SC为毕业院校 <BR>　　　　　SH为生肖 <BR>　　　　　SX为性别 <BR>　　　　　UN为QQ号 <BR>　　　　　NK为昵称 <BR><BR>　　　　　血型：0&nbsp;=&gt;&nbsp;'', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'A型', <BR>　　　　　　　　2&nbsp;=&gt;&nbsp;'B型', <BR>　　　　　　　　3&nbsp;=&gt;&nbsp;'O型', <BR>　　　　　　　　4&nbsp;=&gt;&nbsp;'AB型', <BR>　　　　　　　　5&nbsp;=&gt;&nbsp;'其他' <BR><BR><BR>　　　　　星座：0&nbsp;=&gt;&nbsp;'', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'水瓶座', <BR>　　　　　　　　2&nbsp;=&gt;&nbsp;'双鱼座', <BR>　　　　　　　　3&nbsp;=&gt;&nbsp;'牡羊座', <BR>　　　　　　　　4&nbsp;=&gt;&nbsp;'金牛座', <BR>　　　　　　　　5&nbsp;=&gt;&nbsp;'双子座', <BR>　　　　　　　　6&nbsp;=&gt;&nbsp;'巨蟹座', <BR>　　　　　　　　7&nbsp;=&gt;&nbsp;'狮子座', <BR>　　　　　　　　8&nbsp;=&gt;&nbsp;'处女座', <BR>　　　　　　　　9&nbsp;=&gt;&nbsp;'天秤座', <BR>　　　　　　　　10&nbsp;=&gt;&nbsp;'天蝎座', <BR>　　　　　　　　11&nbsp;=&gt;&nbsp;'射手座', <BR>　　　　　　　　12&nbsp;=&gt;&nbsp;'摩羯座' <BR><BR>　　　　　生肖：0&nbsp;=&gt;&nbsp;'', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'鼠', <BR>　　　　　　　　2&nbsp;=&gt;&nbsp;'牛', <BR>　　　　　　　　3&nbsp;=&gt;&nbsp;'虎', <BR>　　　　　　　　4&nbsp;=&gt;&nbsp;'兔', <BR>　　　　　　　　5&nbsp;=&gt;&nbsp;'龙', <BR>　　　　　　　　6&nbsp;=&gt;&nbsp;'蛇', <BR>　　　　　　　　7&nbsp;=&gt;&nbsp;'马', <BR>　　　　　　　　8&nbsp;=&gt;&nbsp;'羊', <BR>　　　　　　　　9&nbsp;=&gt;&nbsp;'猴', <BR>　　　　　　　　10&nbsp;=&gt;&nbsp;'鸡', <BR>　　　　　　　　11&nbsp;=&gt;&nbsp;'狗', <BR>　　　　　　　　12&nbsp;=&gt;&nbsp;'猪' <BR><BR>　　　　　性别：0&nbsp;=&gt;&nbsp;'男', <BR>　　　　　　　　1&nbsp;=&gt;&nbsp;'女' <BR><BR>(5).增加好友 <BR>　　提交数据：VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=对方QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;CD=0&amp;UN=对方QQ号(允许被加为好友，此时他已经是你的好友) <BR>　　　　　VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;CD=1&amp;UN=对方QQ号(需要验证) <BR>　　　　　VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;CD=2&amp;UN=对方QQ号(决绝被加为好友) <BR>　　　　　VER=1.1&amp;CMD=AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN为字符) <BR><BR>(5).发送验证 <BR>　　说明：1、如果你加对方为好友，你需要发送验证 <BR>　　　　　2、对方加你为好友，发送了验证，你要通过或者拒绝 <BR>　　　　　这2种情况需要发送验证消息 <BR><BR>　　提交数据：VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=对方QQ号&amp;CD=验证类型&amp;RS=理由 <BR>　　说明：CD为0表示“通过验证”，CD为1表示“拒决加为对方为好友”，CD为2表示“为请求对方加为好友”。 <BR><BR>　　返回：VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0(成功) <BR>　　　　　VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(*) <BR>　　　　　VER=1.1&amp;CMD=Ack_AddToList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN、CD为字符，RS为非UTF-8字符) <BR>　　*如果服务器返回RES=3，那么这次对话的响应时间在20s。当发送验证请求的时候，必须连发2次(请求内容不必一样)，其中一条RES=3，对方收不到，一条RES=0，对方能够收到。当CD&gt;=3时，RES=3，响应时间20s。 <BR><BR>(6).删除好友 <BR>　　提交数据：VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=删除的QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;(成功) <BR>　　　　　VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(响应时间30s，重复发送的后果) <BR>　　　　　VER=1.1&amp;CMD=DelFromList&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN为字符) <BR><BR>(7).改变状态 <BR>　　提交数据：VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;ST=状态代码 <BR>　　说明：状态代码：10为上线，20为离线，30为忙碌，40为隐身，其他视为非法 <BR><BR>　　返回：VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;(成功) <BR>　　　　　VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(失败，原因不明，响应时间20s，可能是过于频繁的改变状态引起的) <BR>　　　　　VER=1.1&amp;CMD=Change_Stat&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN为字符，ST非法) <BR><BR>　　特别说明：如果你改变好友，将会给所有好友发送一条系统信息，内容就是状态代码；如果隐身，发送的状态代码为20，表示离线。 <BR>　　　　　　　同理，当你的好友改变状态，你也会收到一条系统信息。 <BR><BR>(9).获得消息 <BR>　　提交数据：VER=1.1&amp;CMD=GetMsgEx&amp;SEQ=标记&amp;UIN=QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=GETMSGEX&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp; MN=4&amp;MT=99,99,99,9,&amp;UN=36791785,99833581,99833581,106814,&amp;MG= 20,30,10,hi&nbsp;,(MN表示信息数量，MT、UN、MG的值用","分割，分别表示消息类型、发送人号码、消息内容) <BR>　　　　　VER=1.1&amp;CMD=GETMSGEX&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;MN=0&amp;MT=&amp;UN=&amp;MG=(表示没有信息) <BR>　　　　　VER=1.1&amp;CMD=GETMSGEX&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN为字符) <BR>　　说明：关于MT： <BR>　　　　　　　9为用户消息，99为系统消息，2为请求信息，3为通过验证，4为拒绝被加好友 <BR>　　　　　关于MG： <BR>　　　　　　　当MT=9时，MG为用户发送的消息内容 <BR>　　　　　　　当MT=99时, <BR>　　　　　　　　　MG=10(QQ_STATUS_ONLINE)表示对方上线 <BR>　　　　　　　　　MG=20(QQ_STATUS_OFFLINE)表示对方下线 <BR>　　　　　　　　　MG=30(QQ_STATUS_BUSY)表示对方进入忙碌状态 <BR>　　　　　　　当MT=2时，MG为对方请求你验证的信息 <BR>　　　　　　　当MT=3时，表示对方通过你的验证 <BR>　　　　　　　当MT=4时，MG为对方拒绝你理由 <BR><BR>(10).发送消息 <BR>　　提交数据：VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;UN=对方QQ号&amp;MG=发送内容 <BR><BR>　　返回：VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0&amp;(成功发送，对方不一定能收到哦) <BR>　　　　　VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=3(发送过快) <BR>　　　　　VER=1.1&amp;CMD=CLTMSG&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=20(没有正确登陆) <BR>　　　　　NULL(UIN、UN为字符，MG含非UTF-8字符) <BR>　　说明：1、当你发消息时，以下情形对方可能看不到(其实是收到了，QQ不提示)你发送的消息： <BR>　　　　　　　你俩互为陌生人，且对方没有和你说过话 <BR>　　　　　　　你在他的陌生人列表里，并且他没有和你说过话(没有验证) <BR>　　　　　2、当你过快发送消息时，系统会给你一个惩罚，RES=3，相应时间20s <BR>　　　　　3、当我发送含有小写字母h的信息时，服务器有可能返回NULL <BR><BR>(11).登出 <BR>　　提交数据：VER=1.1&amp;CMD=Logout&amp;SEQ=标记&amp;UIN=QQ号 <BR><BR>　　返回：VER=1.1&amp;CMD=LOGOUT&amp;SEQ=标记&amp;UIN=QQ号&amp;RES=0(成功，好像永远成功的，不管你是否登陆) <BR>　　　　　NULL(UIN为字符) <BR><img src ="http://www.blogjava.net/dorian/aggbug/23482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorian/" target="_blank">Dorian's Blog</a> 2005-12-12 14:54 <a href="http://www.blogjava.net/dorian/archive/2005/12/12/23482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>