潇潇 发表于 2012-4-5 23:30:06

易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第九课——首次进入开心农场篇(一)

本课的重点:1、首次进入“开心农场”的数据获取及易语言代码编写;
                     2、获取农场相关数据及易语言代码编写。
一、首次进入“开心农场”的数据获取及易语言代码编写;
我们正常登陆论坛后进入论坛界面也就是演示站中的“广场”版面,把HttpWatch工具打开后并按下Record按钮,单击“家园”,然后再点“开心农场”,如下图所示:




这样操作,我们得到两个过程的数据,一是进入家园数据;二是进入开心农场数据。查看数据后,进入家园的数据对我们相对来说不是重点,如果进入开发农场用到些数据或链接我们再返回去看。现在我们来看下“进入开心农场”的数据,共60条数据,大家所截取的数据有可能只有59条。先分析第一、二条数据:+ 0.000      0.672    1025    373    GET    302    Redirect to userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D    http://demo.wgbcw.com/dzx151gbk/userapp.php?mod=app&id=1021978
+ 0.673      1.372    1046    14993    GET    200    text/html; charset=gbk    http://demo.wgbcw.com/dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D上现两条数据Http通信方式为GET,下面分析看下上面两条数据的各相关信息,
第一条数据:
Headers(协议头):(Request-Line)    GET /dzx151gbk/userapp.php?mod=app&id=1021978 HTTP/1.1
Accept    image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Accept-Encoding    gzip, deflate
Accept-Language    zh-cn
Connection    Keep-Alive
Cookie    6Qvx_2132_lastvisit=1333628254; 6Qvx_2132_sid=quCU75; 6Qvx_2132_lastact=1333631953%09home.php%09misc; _D_SID=E39D2ACE; 6Qvx_2132_seccodeS9cI0=457brC3zuwd%2FimVQH2aE0m8lq3w3z9B42IfCcAMA6W3EDpGAMbDaGbXRKqgsnZslrJHQfn65CcIWl6w; 6Qvx_2132_auth=d55bnSYpRtE1w070lufuDHAzejLUin7P9nJnVwMr3PSr%2BAMnpWKlz47nA6ZbOymg%2FWf5jj5oimBGylHU88DQ; 6Qvx_2132_ulastactivity=8c87f7uNaUt3b8EDmQNiE%2BDup5U%2F3rZ8yvMtWyDJBbmtH%2Fd61DTZ; 6Qvx_2132_home_readfeed=1333631944
Host    demo.wgbcw.com
Referer    http://demo.wgbcw.com/dzx151gbk/home.php
User-Agent    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)Query String(查询字串):id    1021978
mod    appPOST Data:无;Content:无
Stream:1、GET /dzx151gbk/userapp.php?mod=app&id=1021978 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://demo.wgbcw.com/dzx151gbk/home.php
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)
Host: demo.wgbcw.com
Connection: Keep-Alive
Cookie: 6Qvx_2132_lastvisit=1333628254; 6Qvx_2132_sid=quCU75; 6Qvx_2132_lastact=1333631953%09home.php%09misc; _D_SID=E39D2ACE; 6Qvx_2132_seccodeS9cI0=457brC3zuwd%2FimVQH2aE0m8lq3w3z9B42IfCcAMA6W3EDpGAMbDaGbXRKqgsnZslrJHQfn65CcIWl6w; 6Qvx_2132_auth=d55bnSYpRtE1w070lufuDHAzejLUin7P9nJnVwMr3PSr%2BAMnpWKlz47nA6ZbOymg%2FWf5jj5oimBGylHU88DQ; 6Qvx_2132_ulastactivity=8c87f7uNaUt3b8EDmQNiE%2BDup5U%2F3rZ8yvMtWyDJBbmtH%2Fd61DTZ; 6Qvx_2132_home_readfeed=13336319442、HTTP/1.1 302 Moved Temporarily
Connection: close
Date: Thu, 05 Apr 2012 13:30:41 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Powered-By: PHP/5.2.8
Content-Type: text/html; charset=gbk
Set-Cookie: 6Qvx_2132_lastact=1333632641%09userapp.php%09app; expires=Fri, 06-Apr-2012 13:30:41 GMT; path=/
Location: userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D第二条数据:
Headers(协议头):(Request-Line)    GET /dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D HTTP/1.1
Accept    image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Accept-Encoding    gzip, deflate
Accept-Language    zh-cn
Connection    Keep-Alive
Cookie    6Qvx_2132_lastvisit=1333628254; 6Qvx_2132_sid=quCU75; 6Qvx_2132_lastact=1333632641%09userapp.php%09app; _D_SID=E39D2ACE; 6Qvx_2132_seccodeS9cI0=457brC3zuwd%2FimVQH2aE0m8lq3w3z9B42IfCcAMA6W3EDpGAMbDaGbXRKqgsnZslrJHQfn65CcIWl6w; 6Qvx_2132_auth=d55bnSYpRtE1w070lufuDHAzejLUin7P9nJnVwMr3PSr%2BAMnpWKlz47nA6ZbOymg%2FWf5jj5oimBGylHU88DQ; 6Qvx_2132_ulastactivity=8c87f7uNaUt3b8EDmQNiE%2BDup5U%2F3rZ8yvMtWyDJBbmtH%2Fd61DTZ; 6Qvx_2132_home_readfeed=1333631944
Host    demo.wgbcw.com
Referer    http://demo.wgbcw.com/dzx151gbk/home.php
User-Agent    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)Query String(查询字串):id    1021978
mod    app
my_suffix    Lw==POST Data:无; Content(返回内容):略。
Stream(数据流):1、(Stream 2 请参考HttpWatch数据)GET /dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://demo.wgbcw.com/dzx151gbk/home.php
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)
Host: demo.wgbcw.com
Connection: Keep-Alive
Cookie: 6Qvx_2132_lastvisit=1333628254; 6Qvx_2132_sid=quCU75; 6Qvx_2132_lastact=1333632641%09userapp.php%09app; _D_SID=E39D2ACE; 6Qvx_2132_seccodeS9cI0=457brC3zuwd%2FimVQH2aE0m8lq3w3z9B42IfCcAMA6W3EDpGAMbDaGbXRKqgsnZslrJHQfn65CcIWl6w; 6Qvx_2132_auth=d55bnSYpRtE1w070lufuDHAzejLUin7P9nJnVwMr3PSr%2BAMnpWKlz47nA6ZbOymg%2FWf5jj5oimBGylHU88DQ; 6Qvx_2132_ulastactivity=8c87f7uNaUt3b8EDmQNiE%2BDup5U%2F3rZ8yvMtWyDJBbmtH%2Fd61DTZ; 6Qvx_2132_home_readfeed=1333631944现在我们根据上面两条数据来编写代码,先看第一条数据中的协议头,和我们第八课的协议头多数一样,只有Referer有所关化,因为定义的是全局数据类型,我们重新附值就可以。我们参考Query String(查询字串)及“(Request-Line)    GET /dzx151gbk/userapp.php?mod=app&id=1021978 HTTP/1.1”(注:id为1021978是“开心农场”在网页上的编号,我们可以从进入家园的HttpWatch数据中看到。),编写下面的代码:.版本 2

' 首次进入开心农场第一条数据
' http://demo.wgbcw.com/dzx151gbk/userapp.php?mod=app&id=1021978
' 协议头的Referer有所变化
Request.Referer = “http://demo.wgbcw.com/dzx151gbk/home.php”

URL = “/dzx151gbk/userapp.php?mod=app&id=1021978”
GET (URL, 返回内容)' 根据HttpWatch数据可知返回数据为空
输出调试文本 (“首次进入开心农场第一条数据=======” + 返回内容)
取Cookie并设置 (“http://” + Request.Host + URL)
同理我们把第二条数据的易语言代码如下:.版本 2

' 首次进入开发农场第二条数据
' http://demo.wgbcw.com/dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D
URL = “/dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw==”
GET (URL, 返回内容)
输出调试文本 (“首次进入开心农场第二条数据=======” + 返回内容)
取Cookie并设置 (“http://” + Request.Host + URL)测试代码中……先把HttpWatch数据先上传上来吧:


测试代码无误,正确返回数据。下面我们接着分析HttpWatch中的数据,经观察,第三、四、五、六条数据是关于网页样式及调用JavaScript脚本的数据,和农场数据无关则省略。而第七条数据,我们目前不知道有啥用,那还是按照它操作好了。易语言代码如下:.版本 2

Request.Accept = “*/*”
Request.Referer = “http://demo.wgbcw.com/dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw==”

' http://demo.wgbcw.com/dzx151gbk/uc_server/avatar.php?uid=2&size=small
URL = “/dzx151gbk/uc_server/avatar.php?uid=2&size=small”
GET (URL, 返回内容)' 根据HttpWatch数据可知返回数据为空
'输出调试文本 (“首次进入开心农场第七条数据=======” + 返回内容)
取Cookie并设置 (“http://” + Request.Host + URL)第八条数据,看到“my_iframe.js”,应该会想到frame就是农场的意思,这js脚本一定和农场有关,我们现在还不确定这文件到底有何用,我们在这先不用管它,还是按照协议操作下(注:无Cookies)。.版本 2

' 首次进入农场第八条数据
' 协议头有所变化
' (Request-Line) GET /scripts/my_iframe.js HTTP/1.1
' Host static.manyou.com
' Referer http://demo.wgbcw.com/dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D
Request.Host = “static.manyou.com”
' http://static.manyou.com/scripts/my_iframe.js
返回内容 = “”
URL = “/scripts/my_iframe.js”
GET (URL, 返回内容)' 根据HttpWatch数据可知返回数据为空
输出调试文本 (“首次进入开心农场第八条数据=======” + 返回内容)
第九条数据是取账号头像的,略。
现在我们来分析第十条数据:URL+ 2.486      0.444    888    4377    GET    200    text/html    http://apps.manyou.com/1021978/?my_uchId=2&my_sId=9022208&my_prefix=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2F&my_suffix=%2F&my_current=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fuserapp.php%3Fmod%3Dapp%26id%3D1021978%26my_suffix%3DLw%253D%253D&my_extra=&my_ts=1333632641&my_appVersion=0&my_fullscreen=0&my_sig=8d1d28e93c0092d3199c6207b19d1c8bHeaders(协议头):(Request-Line)    GET /1021978/?my_uchId=2&my_sId=9022208&my_prefix=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2F&my_suffix=%2F&my_current=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fuserapp.php%3Fmod%3Dapp%26id%3D1021978%26my_suffix%3DLw%253D%253D&my_extra=&my_ts=1333632641&my_appVersion=0&my_fullscreen=0&my_sig=8d1d28e93c0092d3199c6207b19d1c8b HTTP/1.1
Accept    image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
……
Host    apps.manyou.com
……Query String(查询字串):my_appVersion    0
my_current    http://demo.wgbcw.com/dzx151gbk/userapp.php?mod=app&id=1021978&my_suffix=Lw%3D%3D
my_extra   
my_fullscreen    0
my_prefix    http://demo.wgbcw.com/dzx151gbk/
my_sId    9022208
my_sig    8d1d28e93c0092d3199c6207b19d1c8b
my_suffix    /
my_ts    1333632641
my_uchId    2POST Data:无。Content和Stream查看Http Watch数据。
下面说说易语言编写代码时注意的几个要点:
1、根据上面第十条数据的协议头内容可知Accept 和 Host和上一次GET通信相比有所变化,我们得重新赋值。
2、看到GET的URL太长及查询字串数据太多,呵呵是不是被吓住了,我们以前提过“当前数据的POST或GET中的URL的内容多少都会利用前面通信的返回数据”,于是我们就在HttpWatch中搜索文本比如“9022208”,经搜索我们在第二条数据的返回内容里就可以找到它,取之。第二条数据中要取的地方:<iframe id="ifm0" frameborder="0" width="810" scrolling="no" height="810" style="position: absolute; top: -5000px; left: -5000px;" src="http://apps.manyou.com/1021978/?my_uchId=2&my_sId=9022208&my_prefix=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2F&my_suffix=%2F&my_current=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fuserapp.php%3Fmod%3Dapp%26id%3D1021978%26my_suffix%3DLw%253D%253D&my_extra=&my_ts=1333632641&my_appVersion=0&my_fullscreen=0&my_sig=8d1d28e93c0092d3199c6207b19d1c8b"></iframe>如果不想把它分成像查询字串那样,我们就直接取一长串字符就行,当然为了防止以后的代码中用到同一数值的话,最好还是像查询字串那样一个一个取出来。另因正则相对比较难些,我们这就用文本操作来取。

增加内容(2013年3月16日):

由于协议头有所变化,所以我又重新写了个GET1函数来实现接收数据,那么第十条数据执行的代码如下:
.版本 2
.支持库 iext2

Request.Accept = “image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*”
Request.Host = “apps.manyou.com”
协议头 = “Accept:” + Request.Accept + #换行符 + “Accept-Encoding:” + Request.AcceptEncoding + #换行符 + “Accept-Language:” + Request.AcceptLanguage + #换行符 + “Connection:” + Request.Connection + #换行符 + “Host:” + Request.Host + #换行符 + “Referer:” + Request.Referer + #换行符 + “User-Agent:” + Request.UserAgent' + #换行符 + “x-requested-with:XMLHttpRequest”
已创建连接 = 假
my_值.my_uchId = 账号信息.uid
URL = “”
URL = “/1021978/?my_uchId=” + my_值.my_uchId + “&my_sId=” + my_值.my_sId + “&my_prefix=” + my_值.my_prefix + “&my_suffix=” + my_值.my_suffix + “&my_current=” + my_值.my_current + “&my_extra=” + my_值.my_extra + “&my_ts=” + my_值.my_ts + “&my_appVersion=” + my_值.my_appVersion + “&my_fullscreen=” + my_值.my_fullscreen + “&my_sig=” + my_值.my_sig
输出调试文本 (“URL===============” + “/1021978/?my_uchId=” + my_值.my_uchId + “&my_sId=” + my_值.my_sId + “&my_prefix=” + my_值.my_prefix + “&my_suffix=” + my_值.my_suffix + “&my_current=” + my_值.my_current + “&my_extra=” + my_值.my_extra + “&my_ts=” + my_值.my_ts + “&my_appVersion=” + my_值.my_appVersion + “&my_fullscreen=” + my_值.my_fullscreen + “&my_sig=” + my_值.my_sig)
临时字节集 = 取空白字节集 (20480)

临时字节集 = GET_1 (URL, 协议头, 返回内容)
输出调试文本 (“首次进入开心农场第十条数据=======” + 返回内容)
主窗口.超级编辑框1.内容 = 到文本 (返回内容)


cake 发表于 2012-4-6 15:40:22

;P

潇潇 发表于 2013-3-17 16:29:09

呵呵,开始更新教程了……
页: [1]
查看完整版本: 易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第九课——首次进入开心农场篇(一)