http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 18488|回复: 17

[求助] Discuz!7论坛登录防止刷新太快,限制跳转时间2秒,如何解决

[复制链接]
发表于 2013-9-20 19:11:42 | 显示全部楼层 |阅读模式
本帖最后由 poisition123 于 2013-9-20 23:20 编辑

有个内网的论坛,Discuz!7,以前用httphelper登录一切正常。最近为了防止网页被刷新太快,加了限制,如果新开网页在前一个网页打开之后的2秒内,则跳出验证网页
主要表现为:
1、httphelper登录。如果我按照以前的方法,用URL=“http://****/logging.php?action=login”直接post数据(PostData="username=***&password=***")
则会出现"页面重载开启"等字眼,然后2秒后自动跳转到我要打开的forum板块,这样一来就不知道如何用httphelper设置URL和提交PostData了。
这个最严重,因为我就无法获得cookie了。
2、人工登录。如果我在前一个网页打开之内2秒打开新链接,也出现"页面重载开启"页面或者跳出验证页面。

经过观察,如果人工登录的时候是从index页面点登录输入账号密码,则很少出现"页面重载开启",但2秒限制的问题依旧存在。
请问如何在httphelper或者httpitem设置?或者有其他解决办法?






1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-9-20 23:23:04 | 显示全部楼层
关键看看验证页面是怎么验证的。
 楼主| 发表于 2013-9-20 23:37:44 | 显示全部楼层
本帖最后由 poisition123 于 2013-9-20 23:48 编辑

验证界面很简单
<html><title>这是一个问题及答案。例如:本论坛宗旨是什么?(答案:交流进步)</title></html>
接下来我忘记了,还有个问题,title内的字没有编码,我昨天用gbk、utf8、ASCII都没办法在C#的窗体显示出来,全是乱码。
不知道怎么搞的,现在主要问题变成了总是出现重载界面了。
我发现,人工登录的时候,如果直接输入版块网址,也会出来重载界面,但第一次重载之后再刷该网站,就能打开所在版块,再次出现重载界面的概率比较低,毕竟手工点网页的速度不快。
 楼主| 发表于 2013-9-20 23:42:56 | 显示全部楼层
本帖最后由 poisition123 于 2013-9-20 23:58 编辑
站长苏飞 发表于 2013-9-20 23:23
关键看看验证页面是怎么验证的。

验证界面很简单
<head><title>这是一个问题及答案。例如:本论坛宗旨是什么?(答案:交流进步)</title></head>
接下来我忘记了,总的类似下面的重载页面页面。还有个问题,title内的字没有编码,我昨天用gbk、utf8、ASCII都没办法在C#的窗体显示出来,全是乱码。

那个重载启动的功能很烦,重载页面主要是调用document.location.reload(),重载页面的代码如下:<?xml version="1.0" encoding="gbk"?>
<root><![CDATA[<div id="attackevasive_1" class="popupmenu_option"><b style="font-size: 16px">页面重载开启</b><br /><br />欢迎光临本站,页面正在重新载入,请稍候 ...</div>]]></root>

html 代码
<html><head><title>&#x9875;&#x9762;&#x91cd;&#x8f7d;&#x5f00;&#x542f;</title></head><body bgcolor="#FFFFFF"><script language="JavaScript">function reload() {        document.location.reload();}setTimeout("reload()", 1001);</script><table cellpadding="0" cellspacing="0" border="0" width="700" align="center" height="85%">  <tr align="center" valign="middle">    <td>    <table cellpadding="10" cellspacing="0" border="0" width="80%" align="center" style="font-family: Verdana, Tahoma; color: #666666; font-size: 11px">    <tr>      <td valign="middle" align="center" bgcolor="#EBEBEB">             <br /><br /> <b style="font-size: 16px">&#x9875;&#x9762;&#x91cd;&#x8f7d;&#x5f00;&#x542f;</b> <br /><br />&#x6b22;&#x8fce;&#x5149;&#x4e34;&#x672c;&#x7ad9;&#xff0c;&#x9875;&#x9762;&#x6b63;&#x5728;&#x91cd;&#x65b0;&#x8f7d;&#x5165;&#xff0c;&#x8bf7;&#x7a0d;&#x5019;&#x20;&#x2e;&#x2e;&#x2e;        <br /><br />      </td>    </tr>    </table>    </td>  </tr></table></body></html>

发表于 2013-9-21 18:59:47 | 显示全部楼层
这个你带cookie自动分析下页面提交下答案试试,应该是行的,这要比验证码简单
 楼主| 发表于 2013-9-22 00:16:06 | 显示全部楼层
本帖最后由 poisition123 于 2013-9-22 00:28 编辑
站长苏飞 发表于 2013-9-21 18:59
这个你带cookie自动分析下页面提交下答案试试,应该是行的,这要比验证码简单

现在的问题主要是无法避开 页面重载 的问题,每次httpitem里的URL一旦写成http://****/logging.php?action=login,总是返回"页面重载"页面的代码,根本无法提交PostData数据。
哪怕是手工在浏览器中输入http://****/logging.php?action=login,也要先出来页面重载的页面大概1秒左右的时间,然后才会出来登录界面(http://****/logging.php?action=login)。下面是我的代码。
[code=csharp]
private void button1_Click(object sender, EventArgs e)
        {            
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = @"http://******/logging.php?action=login&injax=1&loginsubmit=yes", //URL必须项,******指本地网址
                Referer = "http://******/index.php",
                Method = "GET", //URL 可选项 默认为Get  
                Timeout = 3000,
                Cookie = "",//字符串Cookie     可选项  
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",//用户的浏览器类型,版本,操作系统     可选项有默认值  
                Accept = "text/html, application/xhtml+xml",//    可选项有默认值  
                ContentType = "application/x-www-form-urlencoded",//返回类型   可选项有默认值
                Postdata = "formhash=79b0a2b9&referer=&loginfield=username&username=***&password=***&questionid=0&answer=",//Post数据   可选项GET时不需要写
                Allowautoredirect = true
            };
            //得到HTML代码
            HttpResult result = http.GetHtml(item);
            richTextBox1.Text += "Here Cookie:" + "\r\n" + result.Cookie + "\r\n\r\n";
            richTextBox1.Text += "Here Html:" + "\r\n" + result.Html ;
       }
[/code]
最后显示:
Here Cookie:
McE_lastrequest=b55bTFYwBaRaEcmcA4fsh0nUev1tVGUy5dpMvrNm5Zcn9QmCyL%2B8; path=/; httponly; HttpOnly

Here Html:
<html><head><title>页面重载开启</title></head><body bgcolor="#FFFFFF"><script language="JavaScript">function reload() { document.location.reload();}setTimeout("reload()", 1001);</script><table cellpadding="0" cellspacing="0" border="0" width="700" align="center" height="85%">  <tr align="center" valign="middle">    <td>    <table cellpadding="10" cellspacing="0" border="0" width="80%" align="center" style="font-family: Verdana, Tahoma; color: #666666; font-size: 11px">    <tr>      <td valign="middle" align="center" bgcolor="#EBEBEB">      <br /><br /> <b style="font-size: 16px">页面重载开启</b> <br /><br />欢迎光临本站,页面正在重新载入,请稍候 ...        <br /><br />      </td>    </tr>    </table>    </td>  </tr></table></body></html>

从返回的结果看,根本没有提交,只是停在页面重载的上,如下图。
我甚至反复提交多次,但总停在该重载页面,无法回避。请问如何跳过去?




未命名.JPG
发表于 2013-9-22 08:25:55 | 显示全部楼层
这是Js重新请求了本页面,你带Cookie再得新请求本页页面试试。document.location.reload();他是在1秒后执行这个。
发表于 2013-9-22 09:46:15 | 显示全部楼层
禁止重定向,然后从协议头获取重定向地址访问,就可以获取COOKIE了。
 楼主| 发表于 2013-9-22 20:07:25 | 显示全部楼层
本帖最后由 poisition123 于 2013-9-22 20:08 编辑
站长苏飞 发表于 2013-9-22 08:25
这是Js重新请求了本页面,你带Cookie再得新请求本页页面试试。document.location.reload();他是在1秒后执行 ...


恕在下愚顿,如何带Cookie新请求本页页面?
是不是下面一步?[code=csharp]HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
}[/code]
问题是前面停在页面重载的页面,根本没有提交成功,获得的Cookie也不全面吧?
此外,登录界面总是要在页面重载之后才回来,没办法提交啊。

 楼主| 发表于 2013-9-22 20:11:03 | 显示全部楼层
我爱苏飞 发表于 2013-9-22 09:46
禁止重定向,然后从协议头获取重定向地址访问,就可以获取COOKIE了。

恕在下愚顿,禁止重定向指什么?Allowautoredirect = false?
此外,如何从协议头获取重定向地址访问?
能不能来点代码解释一下?
多谢了
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-20 17:28

© 2014-2021

快速回复 返回顶部 返回列表