众所周知,如果没有在网站上登录自己的QQ,是没有办法留言的,因为QQ空间不支持匿名留言。我们进入网站的时候,它也会先提示登录,然后才可以后续操作。所以,我们如果要做这样一个留言工具的话,就必须要具备以下步骤: 1.登录QQ 2.发送数据包 3.取得返回信息 QQ的登录数据包我在这里就不演示抓包了,因为腾讯已经改了新的登录接口,但是旧的还能用,我这里还是用旧的QQ登录数据包。在此之前,我们先来给好友的QQ空间留言,抓包: (点击图片可以放大) 上图是抓包之后所显示出来的。我在有钱哥的空间里面留言“测试测试”,大家可以看到,列表中就产生看一个新的项目。其Method属性就是POST!这就是传递到QQ空间服务器的数据包了,大家可以看看红色框框的内容,是不是觉得很熟悉? con=%E6%B5%8B%E8%AF%95%E6%B5%8B%E8%AF%95%7E%7E&uin=298096110&suin=138001655 没错,这红色字体部分就是传说中的HTTP数据包! 大家可以看看,这个数据包里面只有三个参数,分别是con,uin,suin,这三个参数一眼看上去就很容易知道它的意思了,我们分析数据包的时候一般都是根据其参数名称的字面意思以及参数的值来判断这是一个什么样的参数。 我刚才在比你·有钱的QQ空间留言了,我的QQ就是138001655,而有钱的QQ是298096110。除此之外,还有一个最重要的参数,那就是con,这也是我们留言的内容!大家可能会奇怪,上面的留言内容不是“测试测试~~”吗?怎么现在看着变成了一堆乱码? 其实这不是乱码,而是网页编码。至于转换的方法,我们会在下面讲到。 相信大家都懂得抓包了,自己多实践几次,你也可以找一些网站上的注册页面,自己尝试着注册一个账号,然后提交一个表单,抓包看看,尝试着去分析一个数据包,弄清楚各个参数的意思。 如何发送数据包? 这一节是本教程的核心部分。既然我们已经捕捉到了QQ空间留言的数据包,那么我们完全可以模拟这个过程了。VB对于网络的操控性能还是很不错的。在VB中封装了inet,winsock等控件,可以很轻松的调用各种方法去发HTTP数据包。在本教程例子当中,我们用inet作为例子去讲解一下如何发送数据包。 我们先来看看Inet的execute方法 : InetObject.Execute "[POST页面URL]", "POST", "要发送的数据包内容", "封包头信息" 我们在发送数据包的时候需要注意,一个完整的数据包,应该是由报头和封包内容组成的。比如上面我们抓出来的数据包之中: 这是数据包内容: con=%E6%B5%8B%E8%AF%95%E6%B5%8B%E8%AF%95%7E%7E&uin=298096110&suin=138001655 这是数据包头信息: POST /cgi-bin/mobile_update_msg HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/QVOD, application/QVOD, application/vnd.ms-excel, application/vnd.ms- powerpoint, application/msword, */* Referer: http://qz.qq.com/298096110/msglist/ Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQDownload 646; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CIBA) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: qz.qq.com Content-Length: 75 Connection: Keep-Alive Cache-Control: no-cache Cookie: pgv_pvid=5935155721; pgv_flv=10.0; ptcz=711d7cb1ddde86208f1cefa14aeef570559b7327db1e1500853742cd7ff607b7; pvid=5935155721; icache=GDGGMM@LM; pgv_r_cookie=107649076403; o_cookie=138001655; suid=5538977674; adid=138001655; adSP=irZ4SlVL95zhdFpg5bULoRAhsvy9F4wI/hgQDREbzJc=_4400_326830_1278923685_; adVer=2839; ac=1,030,006; showModel=list; tips-share=1; aq_displaybubble=138001655; pt2gguin=o0138001655; uin=o0138001655; skey=@cKMj7aqRM; speed=1; browsertype=4; inbox=0 一般来说,我们在inet之中并不需要把数据包的所有头信息都附加进去。不过有一句是肯定要的,那就是: Content-Type: application/x-www-form-urlencoded 这指定了数据包网页所支持的类型。如果是在winsock里面的话,则需要附带所有的头信息。头信息指定了一个数据包的属性等信息。通过上面的头信息,相信大家也可以获悉很多内容。 我们再回到上面一小节所提到的问题,数据包里面的con参数为什么是经过转换了的字符?因为我们在访问一个网页,或者在HTTP数据传输的时候,服务器并不能直接识别中文字符,因此需要转换。不同编码方式的转换方式也有不同。 QQ空间留言工具的例程我已经写好了,里面的注释很详细,我在这里就不多说了。大家下载例子看看就一目了然。 原帖地址,附件也在该帖内就可以下载: http://www./viewthread.php?tid=73 |
|