TA的每日心情 | 奋斗 2020-6-5 22:18 |
---|
签到天数: 22 天 [LV.4]偶尔看看III
|
前面我们讲了论坛验证码及相关参数的获取,今天我们来讲论坛账号登陆。我们每次讲课都离不开HttpWatch这个工具,还是先把获取登陆部分的数据截出来,先来个截图:
上图为账号正确登陆时截取的图片,上图中第一条数据相关信息:
1、第一条数据:
+ 0.000 0.225 1199 1364 POST 200 text/xml; charset=gbk http://demo.wgbcw.com/dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1
2、Headers:
(Request-Line) POST /dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1 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
Cache-Control no-cache
Connection Keep-Alive
Content-Length 233
Content-Type application/x-www-form-urlencoded
Cookie 6Qvx_2132_sid=gBO1Qz; 6Qvx_2132_lastvisit=1332846467; 6Qvx_2132_lastact=1332850222%09misc.php%09seccode; _D_SID=973C78A4; 6Qvx_2132_seccodeSec1x=e453Jr%2BO1K20al8oJFEMUyaLm70FnJAt%2FQQtkmcYsEBeXtAFoK5fxlXkINBPlIdbaao2f%2FaTT1qhU8I
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)
3、Query String:
action login
handlekey login
inajax 1
loginhash LUOLP
loginsubmit yes
mod logging
4、POST Data:
auth 99510J3IpSyUBKLIfABJFFHqA+hGL5V3sl282/FCo3pmWUnV0xH7/TBXewY 70
formhash a87678d1 17
loginsubmit <STRONG>¼</STRONG> 51
referer http://demo.wgbcw.com/dzx151gbk/forum.php 59
seccodeverify e983 18
sechash Sec1x 13
5、Content:
- <?xml version="1.0" encoding="gbk"?>
- <root><![CDATA[<script type="text/javascript" reload="1">if(typeof succeedhandle_login=='function') {succeedhandle_login('http://demo.wgbcw.com/dzx151gbk/forum.php', '欢迎你回来,wgbcw1。现在将转入登录前页面。', {'username':'wgbcw1','usergroup':'实习版主','uid':'2','groupid':'16','syn':'0'});}hideWindow('login');showDialog('欢迎你回来,wgbcw1。现在将转入登录前页面。', 'notice', null, function () { window.location.href ='http://demo.wgbcw.com/dzx151gbk/forum.php'; }, 0, null, null, null, null, null, 3);</script>]]></root>
复制代码 6、Stream:
POST /dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1 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/forum.php
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
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
Content-Length: 233
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: 6Qvx_2132_sid=gBO1Qz; 6Qvx_2132_lastvisit=1332846467; 6Qvx_2132_lastact=1332850222%09misc.php%09seccode; _D_SID=973C78A4; 6Qvx_2132_seccodeSec1x=e453Jr%2BO1K20al8oJFEMUyaLm70FnJAt%2FQQtkmcYsEBeXtAFoK5fxlXkINBPlIdbaao2f%2FaTT1qhU8I
formhash=a87678d1&referer=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fforum.php&auth=99510J3IpSyUBKLIfABJFFHqA%2BhGL5V3sl282%2FFCo3pmWUnV0xH7%2FTBXewY&sechash=Sec1x&seccodeverify=e983&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E
从所获得的数据中不难看出,这条数据的HTTP通信方式为POST,我们先看下在易语言中所编写自定义的POST子程序的代码片段:
- .版本 2
- .子程序 POST, 字节集, , http post
- .参数 URL, 文本型
- .参数 附加数据, 文本型, , PostData
- .参数 返回内容, 文本型
- .局部变量 请求句柄, 整数型
- .局部变量 协议头, 文本型, , , Headers
- .局部变量 dwByteRead, 整数型
- .局部变量 临时文本, 文本型
- .局部变量 返回数据, 字节集
- .局部变量 临时数据, 字节集
复制代码 根据上面的子程序我们先来找下参数:
第一个参数:
URL为 http://demo.wgbcw.com/dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1;另外也可参数 Query String;补充:在测试过程中发现URL的“loginhash”是个变化的值,那我们同样在第二课中的返回数据中获取。先定义个全局变量“loginhash”,获取此值的代码为:
- .版本 2
- loginhash = 取指定文本后N个字符 (临时文本, “main_messaqge_”, 5) ' 第七课中增加
- loginhash = 取文本右边 (loginhash, 5) ' 第七课中增加
- 输出调试文本 (“main_messaqge_========” + loginhash) ' 第七课中增加
复制代码
第二个参数:附加数据为 POST Data;
第三个参数:不难看出如果此函数执行成功的话,应该返回的数据就是上面的Content部分。另所截取的数据中Headers较前面几课而言Content-Length有所变化,我们在编程时一定要注意这点。
现在我们关键来看来附加数据 POST Data部分:
1、auth的值为 99510J3IpSyUBKLIfABJFFHqA+hGL5V3sl282/FCo3pmWUnV0xH7/TBXewY,这么长的字符串(易语言中称文本),是不是感觉在那里见过呢?呵呵当然了,我们在第二课代码测试中就出现过和这相似的字符串,那我们就在那取出来就行了。我们在易语言中定义个全局变量 auth,然后在第二课的返回数据代码中获取:- auth = 取指定文本 (临时文本, “auth=”, “referer”, 1) ' 第七课中增加
复制代码 2、formhash的值为a87678d1,经查看这个值同样在第二课中的返回数据中出现(因前面一直没用过这个值,现在还不知道我们用这值是否是正确的,当然第二课的返回数据中有这个值,我们用上先测试。)第二课中返回数据中第一次出现的地方截图如下:
经分析,第一次出现“formhash”的地方,刚好也是“value=”第一次出现,我们就利用“value=”和“ />”(注意这字符前有一个空格)来取出formhash这个值,我们还是把上图中红色框部分的代码复制出来:
- <input type="hidden" name="formhash" value="b2439da5" />
复制代码 根据网页代码相关知识可知formhash的值应该是上面红色字符部分,在写代码时要注意这点。在易语言中取formhash的代码如下:
- .版本 2
- formhash = 取指定文本 (临时文本, “value=”, “ />”, 1) ' 这样取得字符串为“"b2439da5"” ' 第七课中增加
- formhash = 取文本中间 (formhash, 2, 8) ' 去掉引号 ' 第七课中增加
- 输出调试文本 (“formhash========” + formhash) ' 第七课中增加
复制代码 3、loginsubmit的值为<STRONG>¼</STRONG>,经分析这个值在前面几课中没出现过,我们暂且用这个值来测试。
4、referer的值为 http://demo.wgbcw.com/dzx151gbk/forum.php,这个值就不说了,您懂得。
5、seccodeverify的值为 e983,这个值在HttpWatch中实际上就是验证码。
6、sechash 的值为 Sec1x,经分析实际上这个值就是我们上一课所讲的 idhash。
分析了附加数据的几个值,我们现在可以来写登陆网站的代码了,代码编写中……
补充:
另外我们再看下Stream中的“formhash=a87678d1&referer=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fforum.php&auth=99510J3IpSyUBKLIfABJFFHqA%2BhGL5V3sl282%2FFCo3pmWUnV0xH7%2FTBXewY&sechash=Sec1x&seccodeverify=e983&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E”,实际上这段字符串就是POSTData的数据,我们在易语言中的代码写为:
- POSTData = “formhash=” + formhash + “&referer=” + Request.Referer + “&auth=” + auth + “&sechash=” + idhash + “&seccodeverify=” + 验证码校验.内容 + “&loginsubmit=<STRONG>¼</STRONG>”
复制代码 经测试易语言代码编辑器中不支持像“¼”Unicode编码的特殊字符,还在想办法解决中……
呵呵找到解决办法有两种:
1、用Stream文本中的“%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E”来代替“<STRONG>¼</STRONG>”。
2、另外我用了Delphi XE编写了个DLL文件来调用,效果也不错,这是首先想到的方法。上面的方法是在测试中想到的。因我们用易语言编写代码,那就用第一种方法好了。
论坛登陆部分核心代码如下:
- .版本 2
- .子程序 登陆论坛
- .局部变量 URL, 文本型
- .局部变量 POSTData, 文本型
- .局部变量 返回内容, 文本型
- 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.AcceptEncoding = “gzip,deflate”
- Request.AcceptLanguage = “zh-cn”
- Request.CacheControl = “no-cache”
- Request.Connection = “Keep-Alive”
- ' Request.ContentLength = 233
- Request.ContentType = “application/x-www-form-urlencoded”
- Request.Host = “demo.wgbcw.com”
- Request.Referer = “http://demo.wgbcw.com/dzx151gbk/forum.php”
- Request.UserAgent = “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)”
- URL = “/dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=” + loginhash + “&inajax=1”
- ' formhash=a87678d1&referer=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fforum.php&auth=99510J3IpSyUBKLIfABJFFHqA%2BhGL5V3sl282%2FFCo3pmWUnV0xH7%2FTBXewY&sechash=Sec1x&seccodeverify=e983&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E
- POSTData = “formhash=” + formhash + “&referer=” + Request.Referer + “&auth=” + auth + “&sechash=” + idhash + “&seccodeverify=” + 验证码校验.内容 + “&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E”
- Request.ContentLength = 取文本长度 (POSTData) ‘第七课增加
- POST (URL, POSTData, 返回内容)
- 调试窗口.编辑框1.加入文本 (“正常登陆论坛时返回=======” + 返回内容)
- 取Cookie并设置 (“http://” + Request.Host + URL)
- .如果 (寻找文本 (返回内容, “欢迎你回来”, , 假) ≠ -1)
- 信息框 (“论坛登陆成功。”, 0, “登陆提示”)
- .否则
- 信息框 (“论坛登陆失败。”, 0, “登陆提示”)
复制代码 登陆成功时的截图:
在本课登陆论坛测试中,发现个问题,因第二课中所取的auth值的长度不固定,导至原所写的代码有时能登陆成功有时登陆失败。经检查,上面代码的"Request.ContentLength = 取文本长度 (POSTData)"就直接取POSTData文本的长度就可以,我们在POST子程序里的Headers(协议头)中用到:
- 协议头 = “Accept:” + Request.Accept + #换行符 + “Accept-Encoding:” + Request.AcceptEncoding + #换行符 + “Accept-Language:” + Request.AcceptLanguage + #换行符 + “Cache-Control:” + Request.CacheControl + #换行符 + “Connection:” + Request.Connection + #换行符 + “Content-Length:” + 到文本 (Request.ContentLength) + #换行符 + “Content-Type:” + Request.ContentType + #换行符 + “Host:” + Request.Host + #换行符 + “Referer:” + Request.Referer + #换行符 + “User-Agent:” + Request.UserAgent
复制代码
好了本课内容就到这里,有不懂的地方就回帖寻问吧,呵呵。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|