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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 8499|回复: 13

[其他] 求助:关于HttpHelper类的使用问题,一简单投票网站

[复制链接]
发表于 2014-3-12 12:53:37 | 显示全部楼层 |阅读模式
本是是一小菜鸟,最近几个月一直在学习C#,最近看到HttpHelper类,不是太懂,正好结合一实例,请教各位大牛。声明这个投票网站,正好有个活动在上面举行,拿他练手,一看就是(起个名字活动骗钱)
1、网站地址:http://tp.sqbaixing.com,在下方投票找个投票项填写任意一个手机号码,点击投票即可。
简单验证手机号码,不验证IP,不限IP。
提交格式 :http://tp.sqbaixing.com/ashx/toupiao.ashx?id=" + id + "&dh=" + _dh + "&now=" + new Date())
分析ID为投票单位,dh值填手机友,时间加日期,即可提交成功,软件是返回信息:(showmsg(21,-1))  其中21为上面某个单位编号:
如:http://tp.sqbaixing.com/ashx/toupiao.ashx?id=21&dh=手机号码&now=Fri%20Mar%2007%202014%2015:44:14%20GMT+0800%20(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)  这个地址复制粘贴到地址栏中即可投票成功。
QQ截图20140312125036.png
声明:本人绝对不是为了投票,因为截图中用的一个简单的投票软件即可实现,正好这个简单的网站即可学习httphelper类的使用,请各位大牛帮分析一下,菜鸟如何用C#实现。。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-3-12 15:08:17 | 显示全部楼层
貌似很简单的啊。。
QQ截图20140312150819.jpg
发表于 2014-3-12 15:09:33 | 显示全部楼层
[C#] 纯文本查看 复制代码
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://tp.sqbaixing.com/ashx/toupiao.ashx",//URL     必需项    
                Method = "post",//URL     可选项 默认为Get   
                IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写   
                Cookie = "",//字符串Cookie     可选项   
                Referer ="",//来源URL     可选项   
                Postdata = "id=21&dh=手机号&now=Fri%20Mar%2007%202014%2015:44:14%20GMT+0800%20(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)",//Post数据     可选项GET时不需要写   
                Timeout = 100000,//连接超时时间     可选项默认为100000    
                ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000   
                UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统     可选项有默认值   
                ContentType = "application/x-www-form-urlencoded",//返回类型    可选项有默认值   
                Allowautoredirect = false,//是否根据301跳转     可选项   
                //CerPath = "d:\123.cer",//证书绝对路径     可选项不需要证书时可以不写这个参数   
                //Connectionlimit = 1024,//最大连接数     可选项 默认为1024    
                ProxyIp = "",//代理服务器ID     可选项 不需要代理 时可以不设置这三个参数    
                //ProxyPwd = "123456",//代理服务器密码     可选项    
                //ProxyUserName = "administrator",//代理服务器账户名     可选项   
                ResultType = ResultType.String
            };
            HttpResult result = http.GetHtml(item);
            string html = result.Html;
            string cookie = result.Cookie;
        
 楼主| 发表于 2014-3-12 15:48:29 | 显示全部楼层
我在地址栏中构造这样都可以成功 :http://tp.sqbaixing.com/ashx/tou ... &dh=13337843333
但代码就不行啊。前面发现几次是GET方式,已改正过来。   返回msg(0,0)   如果返回msg(21,-1)就是成功的。
[C#] 纯文本查看 复制代码
private void button1_Click(object sender, EventArgs e)
        {
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://tp.sqbaixing.com/ashx/toupiao.ashx",//URL     必需项    
                Method = "get",//URL     可选项 默认为Get   
                IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写   
                Cookie = "",//字符串Cookie     可选项   
                Referer = "http://tp.sqbaixing.com/ashx/toupiao.ashx",//来源URL     可选项   
                // Postdata = "id=" + id + "&dh=" + _dh + "&now=" + new Date(), //Post数据     可选项GET时不需要写 
                Postdata = "id=21&dh=13923456189",
                Timeout = 100000,//连接超时时间     可选项默认为100000    
                ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000   
                UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统     可选项有默认值   
                ContentType = "text/html",//返回类型    可选项有默认值   
                Allowautoredirect = false,//是否根据301跳转     可选项   
                //CerPath = "d:\123.cer",//证书绝对路径     可选项不需要证书时可以不写这个参数   
                //Connectionlimit = 1024,//最大连接数     可选项 默认为1024    
                ProxyIp = "",//代理服务器ID     可选项 不需要代理 时可以不设置这三个参数    
                //ProxyPwd = "123456",//代理服务器密码     可选项    
                //ProxyUserName = "administrator",//代理服务器账户名     可选项   
                ResultType = ResultType.String
            };
            HttpResult result = http.GetHtml(item);
            string html = result.Html;
            string cookie = result.Cookie;
            textBox1.Text = html;
            textBox2.Text = cookie;

        }


textBox1.Text 无论怎么样都返回msg(0,0),百思不得其解。

下面投票部分的前台代码:
[JavaScript] 纯文本查看 复制代码
<script type="text/javascript">
        function toupiao(id) {
            var _dh = document.getElementById("txt_" + id).value;
            if (_dh == "")
                showMsg(id, 1);
            else
                addJs("jstoupiao", root + "ashx/toupiao.ashx?id=" + id + "&dh=" + _dh + "&now=" + new Date());
        }
        function showMsg(id, type) {
            if (type == -1) {
                var _span = document.getElementById("span_" + id);
                _span.innerHTML = _span.innerHTML - 0 + 1;
                alert("投票成功,感谢您的参与!");
            }
            else if (type == 0) {
                alert("操作有误!");
            }
            else if (type == 1) {
                alert("请输入您的手机号!");
                document.getElementById("txt_" + id).focus();
            }
            else if (type == 2) {
                alert("您输入的手机号不正确,请重新输入!");
                document.getElementById("txt_" + id).focus();
            }
            else if (type == 3) {
                alert("您的手机号已投过票了!");
                document.getElementById("txt_" + id).focus();
            }
发表于 2014-3-13 14:25:24 | 显示全部楼层
本帖最后由 Monn 于 2014-3-13 14:27 编辑

你这个代码本身就有问题,既然是你选了get方式,那你postdata里就不应该有数据。get就是通过url传输参数的。
我上面给你发的代码就是 正确的了,如果你要用get方式,那就改成这样的

[C#] 纯文本查看 复制代码
 HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://tp.sqbaixing.com/ashx/toupiao.ashx?id=21&dh=13923456189",//URL     必需项    
                Method = "get",//URL     可选项 默认为Get   
                IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写   
                Cookie = "",//字符串Cookie     可选项   
                Referer = "",//来源URL     可选项   
                Postdata = "",//Post数据     可选项GET时不需要写   
                Timeout = 100000,//连接超时时间     可选项默认为100000    
                ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000   
                UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统     可选项有默认值   
                ContentType = "application/x-www-form-urlencoded",//返回类型    可选项有默认值   
                Allowautoredirect = false,//是否根据301跳转     可选项   
                //CerPath = "d:\123.cer",//证书绝对路径     可选项不需要证书时可以不写这个参数   
                //Connectionlimit = 1024,//最大连接数     可选项 默认为1024    
                ProxyIp = "",//代理服务器ID     可选项 不需要代理 时可以不设置这三个参数    
                //ProxyPwd = "123456",//代理服务器密码     可选项    
                //ProxyUserName = "administrator",//代理服务器账户名     可选项   
                ResultType = ResultType.String
            };
            HttpResult result = http.GetHtml(item);
            string html = result.Html;



 楼主| 发表于 2014-3-13 14:57:17 | 显示全部楼层
非常感谢你帮了我的大忙,真的太感谢你啦!
今天用WebBrowser控件写的一个自动填表,很好,稍微改些代码就能全自动投票了。。请Moon看看。
[C#] 纯文本查看 复制代码
 private void button1_Click(object sender, EventArgs e)
        {

            HtmlElement tbshouji = webBrowser1.Document.All["txt_21"];     //获取手机号对应元素
            HtmlElement tbbutton = webBrowser1.Document.GetElementById("btn_21"); //获取按钮位置
            if (tbshouji == null)
                return;
            tbshouji.SetAttribute("value",txtshouji.Text);     //给用户名赋值            
            tbbutton.InvokeMember("click");
            webBrowser1.Document.InvokeScript("eval", new string[] { "window.alert = null;" });//禁止点击后出现投票成功的alert对话框。
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            txtshouji.Text = "13776466848";
            webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
            webBrowser1.Navigate("http://tp.sqbaixing.com/");

        }

发表于 2014-3-13 15:22:58 | 显示全部楼层
qq6227575 发表于 2014-3-13 14:57
非常感谢你帮了我的大忙,真的太感谢你啦!
今天用WebBrowser控件写的一个自动填表,很好,稍微改些代码就 ...

晕。。post数据都抓到了,还弄模拟点击干啥,效率太低了,直接生成手机号post或者get提交不就行了。。
 楼主| 发表于 2014-3-13 15:25:25 | 显示全部楼层
C#自学一个月了。要不就是菜鸟嘛,先信邓爷爷的话,先抓个猫,管它是黑猫还是白猫。
 楼主| 发表于 2014-3-13 15:26:11 | 显示全部楼层
VB/C/C++都自学过,都属半途而废。
 楼主| 发表于 2014-3-13 15:34:47 | 显示全部楼层
学习了,有时候人在直观的,有人要效率的。都有需要 。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-11-24 02:08

© 2014-2021

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