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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

12
返回列表 发新帖
楼主: poisition123

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

[复制链接]
发表于 2013-9-23 08:05:24 | 显示全部楼层
Allowautoredirect = false?这个是禁止重定向,不是禁止跳转,跳转与重定向不是一个概念,你这个是使用JS跳转,使用你跳转之前的页面的Cookie去请求要跳转的页面就行了。

使用JS跳转的,就必须取出JS跳转的网址然后进行请求,

比如你这个应该是这样
第一步请求一个页面获取Cookie
然后带个Cookie去请求跳转页面。
得到Cookie如有就带这个,如果没有就带上一步的进行跳转。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-9-23 23:21:21 | 显示全部楼层
本帖最后由 poisition123 于 2013-9-23 23:34 编辑
站长苏飞 发表于 2013-9-23 08:05
Allowautoredirect = false?这个是禁止重定向,不是禁止跳转,跳转与重定向不是一个概念,你这个是使用JS ...


多谢站长的细心回复,在下愚钝,还是不太明白。
使用JS跳转的,就必须取出JS跳转的网址然后进行请求     --------------我用HttpAnalyzer看了,没发现有新的跳转网址。我申请的是http://xxxxxx/index.php首页,只不过在httpitem里设置URL是"http://******/logging.php?action=login&injax=1&loginsubmit=yes"。
而且document.location.reload()方法没带URL参数,说明刷新的就是原来的网址。是不是我再请求跳转页面还是index首页?再请求httpitem里的URL是不是还是“http://******/logging.php?action=login&injax=1&loginsubmit=yes"?

比如你这个应该是这样
第一步请求一个页面获取Cookie             //此处是不是Method="GET"?
然后带个Cookie去请求跳转页面。         //此处是不是Method="POST"?
得到Cookie如有就带这个,如果没有就带上一步的进行跳转。

下面根据我的理解写的代码,总算偶尔能登录一两回,但时好时坏,页面重载的界面时不时蹦出来,能否麻烦抽空帮忙看看问题出哪里?多谢了
[code=csharp]
HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = @"http://xxxxxx/logging.php?action=login&injax=1&loginsubmit=yes", //URL必须项,******指本地网址
                Referer = "http://xxxxxx/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",//返回类型    可选项有默认值  &referer=index.php
                //Post数据由于是GET所以没写
                Allowautoredirect = false
            };
            //得到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 + "\r\n\r\n";
            string tempCookie=result.Cookie;
            try
            {
                http = new HttpHelper();
                item = new HttpItem()
                {
                    URL = "http://xxxxx/logging.php?action=login&inajax=1&loginsubmit=yes",//URL     必需项                     
                    Referer = "http://xxxxxx/index.php",
                    Method = "POST",//URL     可选项 默认为Get  
                    Timeout = 3000,
                    //Timeout = 100000,//连接超时时间     可选项默认为100000  
                    //ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000  
                    //IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写  
                    Cookie = tempCookie,//前面得到的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",//返回类型    可选项有默认值  &referer=index.php
                    Postdata = "formhash=4c2d02b9&referer=&loginfield=username&username=***&password=***&questionid=0&answer=",//Post数据     可选项GET时不需要写
                    Allowautoredirect = false
                };
               
                result = http.GetHtml(item);
               richTextBox1.Text += "Here Cookie:" + "\r\n" + result.Cookie + "\r\n\r\n";
               richTextBox1.Text += "Here Html:" + "\r\n" + result.Html + "\r\n\r\n";  
            }
            catch(Exception ex)
            {
             richTextBox1.Text += "Here ex:" + "\r\n" + ex.ToString()+ "\r\n\r\n";   
             }
            [/code]
发表于 2013-9-24 08:10:26 | 显示全部楼层
第二次的来源应该是http://xxxxx/logging.php?action=login&inajax=1&loginsubmit=yes吧。

这个是什么情况不好说,每个网站都有自己的机制需要具体问题具体分析。
 楼主| 发表于 2013-9-26 23:54:29 | 显示全部楼层
本帖最后由 poisition123 于 2013-9-27 00:03 编辑
站长苏飞 发表于 2013-9-24 08:10
第二次的来源应该是http://xxxxx/logging.php?action=login&inajax=1&loginsubmit=yes吧。

这个是什么情 ...


我算是弄明白了一点,这个网站就是开启了"页面重载"的js跳转
我就算提交成功,返回“欢迎回来”,下次申请打开帖子是又重载页面了,之前的cookie全部作废。
我看了网站,如果在“欢迎回来”那个页面等待2秒,网站自动跳转到帖子
所以想问站长,有什么好的办法在“欢迎回来”那页面等待2秒,然后带cookie申请别的页面(帖子或板块),跳过刷新太快导致重载这种想象?
此外,httpitem里的refer指的是什么?网上的帖子有的说是提交申请之前的网页,有的说是该网站的统计页(例如首页),糊涂中。



补充内容 (2013-9-27 01:26):
<script type="text/javascript" reload="1">
打开新页面如果时间太短就得重载,有什么好法子避开?
发表于 2013-9-27 08:02:36 | 显示全部楼层
Referer 是当前请求页面的来源,就是说你是从那个页面发起的这个请求
有啊,你请求到那个页面然后存储下Cookie,让线程等2秒再带Cookie继续访问你说的其他页面就行了吧。
 楼主| 发表于 2013-9-28 04:23:03 | 显示全部楼层
本帖最后由 poisition123 于 2013-9-28 04:32 编辑
站长苏飞 发表于 2013-9-27 08:02
Referer 是当前请求页面的来源,就是说你是从那个页面发起的这个请求
有啊,你请求到那个页面然后存储下Co ...

站长说的和我之前的做法基本一样,保留cookie继续访问,可我一直这么做啊,还是不行。我先说一下我的做法。
假设我要访问板块forum-791-1.html,然后访问里头的新帖子thread-2500-1.html
1、URL=”http://xxxxxx/forum-791-1.html“
     refer=“http://xxxxxx/forum-791-1.html” //访问板块791
     Method="GET"
    Allowautoredirect = true
   然后得到临时请求的cookie,这时候网站会要求我登录
2、URL=“http://xxxxx/logging.php?action=login&inajax=1&loginsubmit=yes"
     refer=”http://xxxxxx/forum-791-1.html“
     Method="POST”
     PostData="formhash=79b0a2b9&referer=&loginfield=username&username=***&password=***&questionid=0&answer="
    Allowautoredirect = true
      这时候返回“欢迎回来”的页面,也正常地得到提交后的cookie。

3、接下来我想访问forum-791的帖子。 下面就是我一直没实现的,麻烦站长看看我出错在哪里。
       Thread.Sleep(2000)  //等待2秒,让"欢迎回来"的页面自动跳到forum-791的网页。实际上我改成2500也不行,
                                      //或者Thread.Spinwait(2000)都试过。此处如何写?
     http = new httphelper()
     item =new httpitem()
     {
       URL=”http://xxxxxx/forum-791-1.html“, //要访问的板块791
       refer="http://xxxxx/logging.php?action=login&inajax=1&loginsubmit=yes",  //这个地址很纠结,改写什么呢?
                                                            //我在ie登录用HttpAnalyzer看了,在post获得数据之后,等2秒,出来几个Get的请求
                                                            //如附件的图,Post接收到3.99K,其对应的网页"欢迎回来" GET接收到13.31K对应的是板块791的页面      
                                                             //其中post的refer是http://xxxxxx/forum-791-1.html,而13.31K则没发现refer,中间的6个get的refer全是
                                                              //"http://xxxxx/logging.php?action=login&inajax=1&loginsubmit=yes"
     Method="GET”,
      Allowautoredirect = true
     }
此次得到的html 显示的是没有成功登录网页对应的代码。


站长能不能帮忙分析一下步骤3我应该如何修改才能登录到板块791?

post之后

post之后
发表于 2013-9-29 07:56:40 | 显示全部楼层
3、不用进行了吧,得到跳转页面就表示登录成功了,直接用第2步登录得到的Cookie就可以访问其他页面了。
你设置  Allowautoredirect = true应该不行吧,这个跳转可不会自动带Cookie,
发表于 2017-2-23 23:16:10 | 显示全部楼层
poisition123 发表于 2013-9-28 04:23
站长说的和我之前的做法基本一样,保留cookie继续访问,可我一直这么做啊,还是不行。我先说一下我的做法 ...

你好 请问页面重载开启的问题解决了
解决的话 可否告知 谢谢
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-4-25 13:44

© 2014-2021

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