易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第六课
本课主要讲述刷新的验证码和校验验证码的HttpWatch操作数据及在易语言中的编写方法。一、刷新的验证码的HttpWatch操作数据及在易语言中的编写方法。
经常在技术论坛上的朋友应该会发现登陆时验证码在一段时间内就会不显示,说明验证码过期,出现下图的情况:
那我们应该重新“刷新验证码”以便登陆论坛,此时在HttpWatch所截取到的数据如图所示:
我们先看下在HttpWatch中所获取新的验证码的数据:
+ 0.000 0.254 706 632 GET 200 text/xml; charset=gbk http://demo.wgbcw.com/dzx151gbk/ ... arget=seccode_Ssg3x
+ 0.140 0.114 622 0 GET (Aborted) * http://demo.wgbcw.com/dzx151gbk/static/image/common/loading.gif
+ 0.255 2.153 637 91629 GET 200 image/gif http://demo.wgbcw.com/dzx151gbk/ ... =84822&idhash=Ssg3x
2.409 1965 92261 3 requests
根据前面所讲知识,我们的关键数据就是第一条和第三条,那分别把第一条和第三条数据的Headers 、Query String 、Content复制出来:
1、第一条数据
Headers:(Request-Line) GET /dzx151gbk/misc.php?mod=seccode&action=update&idhash=Ssg3x&inajax=1&ajaxtarget=seccode_Ssg3x HTTP/1.1
Accept */*
Accept-Encoding gzip, deflate
Accept-Language zh-cn
Connection Keep-Alive
Cookie 6Qvx_2132_lastvisit=1332656974; 6Qvx_2132_sid=bornjC; 6Qvx_2132_lastact=1332678574%09misc.php%09seccode; _D_SID=DD3778A4; 6Qvx_2132_seccodeSsg3x=f576zw7kFeYPHiOX39XMIJV%2FMzKE5YoxnxHlv%2B5qyFXfw147BuPknSr014hUECFR6%2B%2FD%2F7qzNYYlVXE
Host demo.wgbcw.com
Referer http://demo.wgbcw.com/dzx151gbk/forum.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)
x-requested-with XMLHttpRequest
Query String:action update
ajaxtarget seccode_Ssg3x
idhash Ssg3x
inajax 1
mod seccode
Content:<?xml version="1.0" encoding="gbk"?>
<root><!]></root>2、第三条数据
Headers:(Request-Line) GET /dzx151gbk/misc.php?mod=seccode&update=84822&idhash=Ssg3x HTTP/1.1
Accept */*
Accept-Encoding gzip, deflate
Accept-Language zh-cn
Connection Keep-Alive
Cookie 6Qvx_2132_lastvisit=1332656974; 6Qvx_2132_sid=bornjC; 6Qvx_2132_lastact=1332679016%09misc.php%09seccode; _D_SID=DD3778A4; 6Qvx_2132_seccodeSsg3x=f576zw7kFeYPHiOX39XMIJV%2FMzKE5YoxnxHlv%2B5qyFXfw147BuPknSr014hUECFR6%2B%2FD%2F7qzNYYlVXE
Host demo.wgbcw.com
Referer http://demo.wgbcw.com/dzx151gbk/forum.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:idhash Ssg3x
mod seccode
update 84822
Content:返回验证码图片。
从上面的数据不难看出重新刷新验证码的数据实际和第三课中的内容一样了(对比时请仔细点哦),那我们就把第三课的易语言代码中的局部变量“验证码链接文本”定义为全局变量就行了,写代码中……
经编写易语言代码发现我们只要增加两段代码就实现了鼠标按下“图片框”就会刷新验证码:.版本 2
.程序集 自定义函数
.子程序 刷新验证码
.局部变量 URL, 文本型
.局部变量 临时文本, 文本型
.如果 (验证码链接文本 ≠ “”)
URL = “/dzx151gbk/” + 验证码链接文本
_启动窗口.图片框1.图片 = GET (URL, 临时文本)
_启动窗口.图片框1.显示方式 = 2' 防止有些验证码字符看不全
.否则
.如果结束.版本 2
.子程序 _图片框1_鼠标左键被按下, 逻辑型, , 刷新验证码
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
刷新验证码 ()
二、校验的验证码的HttpWatch操作数据及在易语言中的编写方法。
先看个截图:
从上面的图中看出校验验证码的关键数据就只有一条:
+ 0.000 0.259 798 470 GET 200 text/xml; charset=gbk http://demo.wgbcw.com/dzx151gbk/ ... sh=SXsAS&secverify=xpgh
我们同样把这条数据的Headers 、Query String 、Content复制出来:
Headers:
(Request-Line) GET /dzx151gbk/misc.php?mod=seccode&action=check&inajax=1&&idhash=SXsAS&secverify=xpgh HTTP/1.1
Accept */*
Accept-Encoding gzip, deflate
Accept-Language zh-cn
Connection Keep-Alive
Cookie 6Qvx_2132_lastvisit=1332656974; 6Qvx_2132_sid=3Q2V6y; 6Qvx_2132_lastact=1332684075%09misc.php%09seccode; _D_SID=DD3778A4; 6Qvx_2132_seccodeSsg3x=7d46rfoXYPnszj6L2%2B9SomnXbcHAYbQsoCRg0FX3tpIzk6hG9yNbMvtTULEGCjARxPeA9bfWLm5MfVE; 6Qvx_2132_seccodeSXsAS=8833R7UxXpgBZxo7svWS2a5h5E%2FCGcRlc99wk%2BGkl2DJqdi7FfXDCLssn%2F939wiYs1Rjm4L5raKW6Sc
Host demo.wgbcw.com
Referer http://demo.wgbcw.com/dzx151gbk/forum.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)
x-requested-with XMLHttpRequest
Query String:
action check
idhash SXsAS
inajax 1
mod seccode
secverify xpgh
Content:<?xml version="1.0" encoding="gbk"?>
<root><!]></root>从上面的Headers中蓝色部分不难看出我们的关键值有两个“idhash”和“secverify”验证码,而idhash就是我们第三课中所取得“后五个字符文”,那我们就把这局部变量定义为全局变量,同时为了方便我们把它更名为“idhash”。“idhash”和“secverify”两个值都知道了,那我们只需用HTTP的GET方法把“/dzx151gbk/misc.php?mod=seccode&action=check&inajax=1&&idhash=SXsAS&secverify=xpgh”发送给服务器就行了。另外验证码校验成功时的Content数据中有“succeed”字样说明成功校验。那我们现在可以写代码了:.版本 2
.子程序 校验验证码, , , 第六课增加的代码
.参数 验证码, 文本型
.局部变量 URL, 文本型
.局部变量 临时文本, 文本型
.如果 (idhash ≠ “” 且 验证码 ≠ “”)
URL = “/dzx151gbk/misc.php?mod=seccode&action=check&inajax=1&&idhash=” + idhash + “&secverify=” + 验证码
GET (URL, 临时文本)
.如果 (寻找文本 (临时文本, “succeed”, , 假) ≠ -1)
' http://demo.wgbcw.com/dzx151gbk/static/image/common/check_right.gif
URL = “/dzx151gbk/static/image/common/check_right.gif”
_启动窗口.图片框2.图片 = GET (URL, 临时文本)
.否则
' http://demo.wgbcw.com/dzx151gbk/static/image/common/check_error.gif
URL = “/dzx151gbk/static/image/common/check_error.gif”
_启动窗口.图片框2.图片 = GET (URL, 临时文本)
.如果结束
.否则
.如果结束
.版本 2
.子程序 _按钮4_被单击
校验验证码 (验证码校验.内容)经测试出现下面的两种情况:
1、验证码校验成功
2、验证码校验失败
另外把HttpWatch的数据文件也上传上来:
好了本次课就到这里,我们下次课分析并编写账号登陆论坛部分…… 谢谢老大 分享 呵呵 不知道提不提供源码下载? 请教楼主,在刷新验证码这个子程序中 “验证码链接文本” 此时这个变量是如何获取的? 是不是说API取验证码这个按钮时获取的那个验证码地址,然后赋给了一个全局变量? 请教楼主,在刷新验证码这个子程序中 “验证码链接文本” 此时这个变量是如何获取的?
页:
[1]