潇潇 发表于 2012-3-3 17:18:42

易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第二课

我们先打开HttpWatch所保存的数据如下图所示:

上次分析了第一条数据,现在我们把第二条数据复制出来(选中后右键选择 Copy Row):
+ 0.674                2.687      926      4794      GET      200      text/xml; charset=gbk      http://wgbcwsoft.web-108.com/1.5 ... =fwin_content_login

从图中不难看出所截取的第二条数据用得是GET方法,根据网络数据交换方面的知识应该会想起这么一点:本机客户端所发送到服务器的数据中多少都有上次服务器返回来的数据的一部分,当然如果是第一次和服务器交互时的数据一定没有了(如果不理解的朋友,你只要记住这好了,接触多了慢慢得会知道是怎么回事了)。

那现在我们就找找易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第一课中那些返回的数据和下面这段数据有关:
http://wgbcwsoft.web-108.com/1.51/member.php?mod=logging&action=login&auth=55dem%2BRgn7mTn3h10XIfc9Q9xRiV8s8qwbRn2rdfIS0Uj4NxoqZr1k82ZrQ&referer=http%3A%2F%2Fwgbcwsoft.web-108.com%2F1.51%2Fforum.php&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login
不难发现我们在第一课中发现下面三段相关数据:
第一、在第一课中用所分析到的数据编写了一段易语言代码,测试中分析所返回的数据如下图所示:


第二、第一课中的"Content"数据:
<?xml version="1.0" encoding="gbk"?>
<root><!]></root>
或者第三、第一课中的"Stream"的第二部分数据:
<?xml version="1.0" encoding="gbk"?>
<root><!]></root>
稍微有点JavaScript知识的朋友应该看出在上面三段代码中有"showWindow",这函数应该就是登陆时所弹出的验证码窗口数据。经比较后发现都有共同的部分:
第二条GET方法的数据:
member.php?mod=logging&action=login&auth=55dem%2BRgn7mTn3h10XIfc9Q9xRiV8s8qwbRn2rdfIS0Uj4NxoqZr1k82ZrQ&referer=http%3A%2F%2Fwgbcwsoft.web-108.com%2F1.51%2Fforum.php
"Content"数据:
member.php?mod=logging&action=login&auth=55dem%2BRgn7mTn3h10XIfc9Q9xRiV8s8qwbRn2rdfIS0Uj4NxoqZr1k82ZrQ&referer=http%3A%2F%2Fwgbcwsoft.web-108.com%2F1.51%2Fforum.php
"Stream"数据:
member.php?mod=logging&action=login&auth=55dem%2BRgn7mTn3h10XIfc9Q9xRiV8s8qwbRn2rdfIS0Uj4NxoqZr1k82ZrQ&referer=http%3A%2F%2Fwgbcwsoft.web-108.com%2F1.51%2Fforum.php
易语言编程测试后返回的数据略,可参考上面的图。

上面三条数据及上面示图所示的数据中不难发现除了"auth="之后及"&referer"之前的数据不一样外,其它都相同,经多次截取数据后发现这地方不同,有兴趣的朋友可以试下,毕竟在这写这么多不动手也是空谈。

根据上面所分析表明:在HttpWatch中的第二条数据就是第一条数据返回数据中的一部分,那这样我们可用易语言工具接着写第二条数据所执行的GET方法了,首先要取得第一条数据中返回的数据,我们必须要用到系统核心库中的"文本操作"里的几个命令,另外在易语言工具默认的支持库中也只有"HTTP读文件"这个命令,我们就用它来编写代码好了,写代码中……稍后继续

好了测试代码写好了,如下:.版本 2
.支持库 internet

.子程序 _按钮1_被单击
.局部变量 返回的数据, 字节集, , , 第一课定义
.局部变量 RequestLine, 文本型, , , 第一课定义
.局部变量 PostData, 文本型, , , 第一课定义
.局部变量 Host, 文本型, , , 第一课定义
.局部变量 RequestLine2, 文本型, , , 第二课定义showWindow里的重要数据
.局部变量 member位置, 整数型, , , 第二课定义member文本位置
.局部变量 referer位置, 整数型
.局部变量 referer, 文本型

' 第一课代码开始=====================
Host = “http://wgbcwsoft.web-108.com”
RequestLine = Host + “/1.51/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1”
PostData = “username=” + 编辑框1.内容 + “&password=” + 编辑框2.内容 + “&quickforward=yes&handlekey=ls”
返回的数据 = HTTP读文件 (RequestLine + “&” + PostData)

调试窗口.编辑框1.加入文本 (到文本 (返回的数据))' 第二课改

' 第二课代码开始
.如果 (到文本 (返回的数据) ≠ “”)
    member位置 = 寻找文本 (到文本 (返回的数据), “member”, , 假)
    referer位置 = 寻找文本 (到文本 (返回的数据), “referer”, , 假)
    RequestLine2 = 取文本中间 (到文本 (返回的数据), member位置, referer位置 - member位置 - 1)
    调试窗口.编辑框1.加入文本 (“第一条数据返回:===========” + RequestLine2 + “===========”)

    .如果 (RequestLine2 ≠ “”)
      referer = Host + “/1.51/”
      返回的数据 = HTTP读文件 (referer + RequestLine2 + “&referer=” + referer + “forum.php&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login”)
      调试窗口.编辑框1.加入文本 (到文本 (返回的数据))
    .否则

    .如果结束

.否则
    调试窗口.编辑框1.加入文本 (“服务器没返回数据,请检查……”)
.如果结束经测试后返回如下数据:<?xml version="1.0" encoding="gbk"?>
<root><![CDATA[
<div id="main_messaqge_L5FK5" style="width: auto">
<div id="layer_login_L5FK5">
<h3 class="flb">
<em id="returnmessage_L5FK5">
请补充下面的登录信息</em>
<span><a href="javascript:;" class="flbc" onclick="hideWindow('login', 0, 1);" title="关闭">关闭</a></span>
</h3>
<form method="post" autocomplete="off" name="login" id="loginform_L5FK5" class="cl" onsubmit="pwdclear = 1;ajaxpost('loginform_L5FK5', 'returnmessage_L5FK5', 'returnmessage_L5FK5', 'onerror');return false;" action="member.php?mod=logging&amp;action=login&amp;loginsubmit=yes&amp;handlekey=login&amp;loginhash=L5FK5">
<div class="c cl">
<input type="hidden" name="formhash" value="639a1588" />
<input type="hidden" name="referer" value="http://wgbcwsoft.web-108.com/1.51/forum.php" />
<input type="hidden" name="auth" value="fa1fw0EkvNa/NZbsn53JK1BfnzdchK3tPMCdP+yHrM1ieLbsA3aqaJMk+dA" />

<input name="sechash" type="hidden" value="SZAUF" />

<div class="rfm"><table><tr><th>验证码: </th><td><input name="seccodeverify" id="seccodeverify_SZAUF" type="text" autocomplete="off" style="width:100px" class="txt px vm" onblur="checksec('code', 'SZAUF')" tabindex="1" />
<a href="javascript:;" onclick="updateseccode('SZAUF');doane(event);" class="xi2">换一个</a>
<span id="checkseccodeverify_SZAUF"><img src="static/image/common/none.gif" width="16" height="16" class="vm" /></span>

<span id="seccode_SZAUF"></span>
<script type="text/javascript" reload="1">updateseccode('SZAUF');</script>
</td></tr></table></div>



<div class="rfmbw0">
<table>
<tr>
<th></th>
<td><label for="cookietime_L5FK5"><input type="checkbox" class="pc" name="cookietime" id="cookietime_L5FK5" tabindex="1" value="2592000"/>自动登录</label></td>
</tr>
</table>
</div>

<div class="rfm mbw bw0">
<table width="100%">
<tr>
<th>&nbsp;</th>
<td>
<button class="pn pnc" type="submit" name="loginsubmit" value="true" tabindex="1"><strong>登录</strong></button>
</td>
<td>
</td>
</tr>
</table>
</div>

</div>
</form>
</div>
<div id="layer_lostpw_L5FK5" style="display: none;">
<h3 class="flb">
<em id="returnmessage3_L5FK5">找回密码</em>
<span><a href="javascript:;" class="flbc" onclick="hideWindow('login')" title="关闭">关闭</a></span>
</h3>
<form method="post" autocomplete="off" id="lostpwform_L5FK5" class="cl" onsubmit="ajaxpost('lostpwform_L5FK5', 'returnmessage3_L5FK5', 'returnmessage3_L5FK5', 'onerror');return false;" action="member.php?mod=lostpasswd&amp;lostpwsubmit=yes&amp;infloat=yes">
<div class="c cl">
<input type="hidden" name="formhash" value="639a1588" />
<input type="hidden" name="handlekey" value="lostpwform" />
<div class="rfm">
<table>
<tr>
<th><label for="lostpw_username">用户名:</label></th>
<td><input type="text" name="username" id="lostpw_username" size="30" value=""tabindex="1" class="px p_fre" /></td>
</tr>
</table>
</div>
<div class="rfm">
<table>
<tr>
<th><label for="lostpw_email">Email:</label></th>
<td><input type="text" name="email" id="lostpw_email" size="30" value=""tabindex="1" class="px p_fre" /></td>
</tr>
</table>
</div>

<div class="rfm mbw bw0">
<table>
<tr>
<th></th>
<td><button class="pn pnc" type="submit" name="lostpwsubmit" value="true" tabindex="100"><span>提交</span></button></td>
</tr>
</table>
</div>
</div>
</form>
</div>
</div>

<div id="layer_message_L5FK5" style="display: none;">
<h3 class="flb" id="layer_header_L5FK5">
<em>用户登录</em>
<span><a href="javascript:;" class="flbc" onclick="hideWindow('login')" title="关闭">关闭</a></span>
</h3>
<div class="c"><div class="alert_right">
<div id="messageleft_L5FK5"></div>
<p class="alert_btnleft" id="messageright_L5FK5"></p>
</div>
</div>

<script src="static/js/md5.js?SJ9" type="text/javascript" reload="1"></script>
<script type="text/javascript" reload="1">
var pwdclear = 0;
function initinput_login() {
document.body.focus();
}
initinput_login();

function clearpwd() {
if(pwdclear) {
$('password3_L5FK5').value = '';
}
pwdclear = 0;
}
</script>]]></root>好了这次课就到这里,下次课我们祥细讲讲
referer + RequestLine2 + “&referer=” + referer + “forum.php&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login”)
这段数据怎么分析出来的。

漏网之鱼 发表于 2012-4-17 10:21:59

支持lz 谢谢分享 嘎嘎

南水无鱼 发表于 2012-5-4 10:56:22

本帖最后由 南水无鱼 于 2012-5-4 10:57 编辑

LZ你好。
以上代码中这段:

如果 (RequestLine2 ≠ “”)
      referer = Host + “/1.51/”
      返回的数据 = HTTP读文件 (referer + RequestLine2 + “&referer=” + referer + “forum.php&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login”)


我加红的这段,我没弄明白从哪里来的,如果去掉就成了返回html代码了吧

潇潇 发表于 2012-5-4 15:48:55

南水无鱼 发表于 2012-5-4 10:56 static/image/common/back.gif
LZ你好。
以上代码中这段:



请参考第三课……

djah110 发表于 2012-7-12 16:54:43

下来看看源码,学习

x740073529 发表于 2013-12-11 23:15:14

:$来学习下载了
页: [1]
查看完整版本: 易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第二课