潇潇 发表于 2012-3-25 21:45:40

易语言+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的数据文件也上传上来:
好了本次课就到这里,我们下次课分析并编写账号登陆论坛部分……

漏网之鱼 发表于 2012-4-17 14:56:15

谢谢老大 分享 呵呵

南水无鱼 发表于 2012-5-3 23:40:58

不知道提不提供源码下载?

南水无鱼 发表于 2012-5-7 20:20:43

请教楼主,在刷新验证码这个子程序中 “验证码链接文本” 此时这个变量是如何获取的?

南水无鱼 发表于 2012-5-7 20:26:21

是不是说API取验证码这个按钮时获取的那个验证码地址,然后赋给了一个全局变量?

扯起嘴捔丶強顏 发表于 2012-6-10 14:17:00

请教楼主,在刷新验证码这个子程序中 “验证码链接文本” 此时这个变量是如何获取的?
页: [1]
查看完整版本: 易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第六课