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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 9163|回复: 9

[求助] 求助!带有formhash和loginfield的自动登录如何写?

[复制链接]
发表于 2013-5-26 02:56:06 | 显示全部楼层 |阅读模式
整了半天,就是没弄对,求助,帮忙看看代码哪里有问题,还有postdata写法是否有误,多谢了
网址http://www.i0532.net/index.php

用firefox抓postdata信息
formhash=2ea79ae4&referer=http://www.i0532.net/&loginfield=username&username=用户名&password=密码&questionid=0&answer=

formhash的值怎么确定?有的做法(火车采集器软件使用说明)说是先预打开要登录页面查看源代码,会有formhash值然后填入,可我这么做不行;此外loginfield=username就照着写没错吧?
我的写法"formhash=2ea79ae4&loginfield=username&username=" + URLEncode(textBox1.Text.Trim()) + "&password=" + URLEncode(textBox2.Text.Trim())  + "&questionid=0&answer=",//referer事先写了,故这里没写,写上也不行

我想登陆之后自动跳转论坛版块,例如转到http://www.i0532.net/forum-85-1.html 供求信息板块,总是停在登陆失败的界面。

基本就按论坛里自动登录赶集网的源代码写的,就改了一下编码和网址,可不知道为啥每次都是失败,未能登录。

private void button1_Click(object sender, EventArgs e)
        {
            //参数类
            item = new HttpItem()
           {
               URL = "http://www.i0532.net/logging.php?action=login",//URL   必需项
               Encoding = "gbk",//编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
               Referer = "http://www.i0532.net/index.php",
               Method = "Post",//URL     可选项 默认为Get
               ContentType = "application/x-www-form-urlencoded",//返回类型    可选项有默认值
               Postdata ="formhash=2ea79ae4&loginfield=username&username="
               + URLEncode(textBox1.Text.Trim())+"&password="  + URLEncode(textBox2.Text.Trim()) +"&questionid=0&answer=",//Post数据 使用URLEncode是为了解决中文用户名或者密码的问题    可选项GET时不需要写
           };
            //得到HTML代码
            string html = http.GetHtml(item);
            cookie = item.Cookie;
            //如果cookie存在说明登录成功
            if (!string.IsNullOrEmpty(cookie))
            {
                //登录成功后访问一下http://www.i0532.net/forum-28-1.html 看看是不是真的登录成功了
                item = new HttpItem()
                {
                    URL = "http://www.i0532.net/forum-28-1.html",//URL     必需项,例如http://www.i0532.net/forum-85-1.html 供求信息板块
                    Encoding = "gbk",//编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
                    Method = "Get",//URL     可选项 默认为Get
                    Cookie = cookie//当前登录Cookie
                };
                //得到HTML代码
                //html = http.GetHtml(item);
                richTextBox1.Text = http.GetHtml(item);
               
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //登录成功后访问一下任意网址测试
            item = new HttpItem()
            {
                URL = textBox3.Text.Trim(),//URL     必需项,比如输入http://www.i0532.net/forum-85-1.html 供求信息板块
                Encoding = "gbk",//编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
                Method = "get",//URL     可选项 默认为Get
                Cookie = cookie//当前登录Cookie
            };
            //得到HTML代码
            richTextBox1.Text = http.GetHtml(item);
        }


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-5-26 11:48:46 | 显示全部楼层
楼主最好是提供个账户密码,你这样有提人去注册 的嫌疑
 楼主| 发表于 2013-5-26 12:21:54 | 显示全部楼层

账号密码已发短信,请查收

本帖最后由 poisition123 于 2013-5-26 12:24 编辑

用户名必须是中文,密码无要求
没有任何替人注册的意思
账号密码已发消息,多谢了
发表于 2013-5-26 12:44:36 | 显示全部楼层
你直接注册一个测试账户发上来就是了,你这样我们怎么帮你,就站长能看到啊,,唉我的亲,我去玩了,帮不了你,我是懒得去注册哈哈
发表于 2013-5-26 16:00:12 | 显示全部楼层
我亲自测试登录是成功的
[code=csharp] HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://www.i0532.net/logging.php?action=login&loginsubmit=yes&inajax=1",//URL     必需项  
                Method = "POST",//URL     可选项 默认为Get  
                Timeout = 100000,//连接超时时间     可选项默认为100000  
                ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000  
                IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写  
                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=77009dc2&referer=http%3A%2F%2Fwww.i0532.net%2Findex.php&loginfield=username&username=%B4%F3%BC%D2%BA%C3&password=wqjihqtqk&questionid=0&answer=",//Post数据     可选项GET时不需要写  
                Allowautoredirect = false
            };
            HttpResult result = http.GetHtml(item);
            string html = result.Html;
            string cookie = result.Cookie;

            //登录成功后进行测试
            item = new HttpItem()
            {
                URL = "http://www.i0532.net/forum-85-1.html ",//URL     必需项,比如输入http://www.i0532.net/forum-85-1.html 供求信息板块
                Method = "get",//URL     可选项 默认为Get
                Cookie = cookie//当前登录Cookie
            };
            //得到HTML代码
             result = http.GetHtml(item);
             html = result.Html;
             cookie = result.Cookie;[/code]
 楼主| 发表于 2013-5-26 21:32:51 | 显示全部楼层
其实说清账号也没什么
账号:岛内人一
密码:1q2w3e

站长,我想问一下,formhash我看好像不是总一样,好像每天都会变化,有什么好的解决办法?
还有16行 HttpResult result = http.GetHtml(item);
我看HttpHelper类没有HttpResult,而http.GetHtml(item)返回的是string,后续17,18行result.html,result.cookie是何解?我下的HttpHelper是1.3正式版  HttpHelper2013-05-03.zip

我试了还是不行啊,是有返回cookie,可是登录还是失败,站长能否把测试成功的代码压缩上传?多谢了
附件是我参照站长做的赶集网改的,未经同意擅自修改,请见谅。帮我看看代码哪里有问题。

部分错误信息:
<div class="postbox"><div class="alert_error">
<p>您无权进行当前操作,原因如下:</p>
<p>对不起,您还未登录,无权访问该版块。</p></div><div class="alert_act">
<form method="post" name="login" id="loginform" class="gateform" action="logging.php?action=login&amp;loginsubmit=yes">
<input type="hidden" name="formhash" value="7304637e" />

WindowsFormsApplication1.rar

43.06 KB, 下载次数: 237, 下载积分: 金钱 -1

代码

发表于 2013-5-26 21:41:06 | 显示全部楼层
没什么那你以后再问问题就直接发上来,这样太浪费大家时间了,HttpResult在1.2就有了,1.3是不可能没有了,除非你不是从我网站下载的类,否则不可能的情况,你看看是不是你下载了之后没有覆盖原先的类呀,

只要你用的是1.3的类直接复制我的代码就是可以的,我测试过是可以的,你再找找吧

我可以肯定的告诉你,你用的类不可能是1.3版本的,你找找问题吧,很简单的道理,你用的不是最新版的,具体原因你自己找找吧,不相信你自己对应一下教程里的代码吧。http://www.sufeinet.com/thread-2766-1-1.html


发表于 2013-5-26 21:43:16 | 显示全部楼层
/// <summary>
/// 类说明:HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
/// 编码日期:2011-09-20
/// 编 码 人:苏飞
/// 联系方式:361983679  
/// 更新网址:http://www.sufeinet.com/thread-3-1-1.html
/// 修改日期:2012-12-09
/// </summary>
你自己看看你代码里的类是什么版本,是我最早期的1.1的
http://www.sufeinet.com/thread-3-1-1.html 这网站就不是我网站的域名,
 楼主| 发表于 2013-5-27 21:40:50 | 显示全部楼层
多谢了,后来我仔细查看发现,抛开版本问题,主要还是登录的URL写的有问题。
如果用HttpHelper类的登录Dicsuz! 7.2论坛的话,URL需要加上action、loginsubmit、inajax的值
这点当时一直没发现,否则就算用HttpHelper 1.1也很容易实现自动登录

另外,建议站长把论坛里下面网页关于赶集的自动登录代码修改一下,很容易误导新手使用HttpHelper的。
http://www.sufeinet.com/forum.php?mod=viewthread&tid=1843
发表于 2013-5-27 21:42:34 | 显示全部楼层
你们关注下httphehper就没事了,我门有时间修改
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-5-3 02:03

© 2014-2021

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