码迷,mamicode.com
首页 > Windows程序 > 详细

c#实现到某网站自动领金币功能

时间:2015-04-15 14:54:52      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

需求分析


小木虫是我学生时代经常浏览的论坛,这个站主要以学术讨论为主,那时在这上面还是学到了很多论文方面的姿势的。

每次登陆论坛都忘不了上面的“每日红包”功能,每人每天有一次领金币的机会,金币赞起来可以干很多事情的。渐渐地,我长大了,虽然还是经常登陆论坛去看看,但“每日红包”功能由于步骤“复杂”(需要点击好几下鼠标才能领到),而且金币对我来说也没多大意义了,我的金币便再也没有增加过。直到前天,我需要金币的时候,我才知道币到用时方恨少。如果上天能再给我一次机会。。。因此,我做出了一个重要的决定,重拾“每日红包”功能,而且,这次我是以全方位立体式高逼格方式去领红包。卧槽,跑题了,这是需求分析么?


概要设计


无。


详细设计


无。

好了,我实在装不下去了,下面进入正题。


正题


我想不通过“打开网页,进入论坛,每日红包,选择类型,提交”这一系列步骤就能领到金币,我想点击一个按钮就领到金币,我想很方便的领到金币,我想要很多很多美女。。。,尼玛又跑题了。

社么?通过点击按钮,发送http请求的方式,一键领金币?!对,就是这么酷炫,这酸爽才正宗。。。

那么,http请求怎么发送呢,需要用快递吗。。。,额,不用,自取就行。

下图是红包领取页面,url是http://emuch.net/bbs/memcp.php?action=getcredit&uid=xxxxxx

技术分享

然后chrome右键审查元素,我们找到了传说中的表单:

技术分享

好了,现在我们点击一下“领取红包”按钮,看看会发生社么?于是我选择了“每日冒险型红包”,我为自己写下来一句话“duang...”,我猛戳了“领取红包”按钮。

等等。。。。

在猛戳按钮前别忘了打开chrome的网络监控窗口,我们得监视它到底发生了什么啊魂淡!

技术分享

上图不就是传说中的post请求么?清楚了吧,这就是http请求发送的数据,这下你们满意了吧(周星星音调)哥得意地笑了,因为哥的分析完成了,接下来哥要用c#模拟这个过程,哥要模拟它,模拟她,摸她,摸。。。

好了,下面我们就愉快的模拟吧。

等等。。。

怎么模拟?容我整理一下思绪,组织一下语言,步骤如下:

1.我想要很多美女。。。卧槽又跑题;

2.发送get请求,url是http://emuch.net/bbs/memcp.php?action=getcredit&uid=xxxxxx,获取领红包页面。为什么要进入领红包页面?为什么不直接发送上面分析出来的post请求直接领红包?因为form表单中有一个隐藏域input:formhash,可以在上面图中找到。所以表单提交是需要这个formhash数据的,因此。。。我先获取这个页面中的formhash数据,于是我很流氓的用如下代码获取到了这个formhash

string des = "<input type=\"hidden\" name=\"formhash\" value=\"";
int index = html.IndexOf(des);
string formhash = html.Substring(index + des.Length, 8);
于是我们愉快的获取到了formhash。

那个uid=xxxxxx是什么东东?没错,就。是。用。户。id。。,那这个怎么获取的呢?等会儿告诉你。

3.构造post领金币请求并发送。这一步是非常简单的,将表单中的参数老老实实构造好,然后post请求一发送,金币就到手了。

技术分享
好了,就到此结束吧。

等等。。。

好像丢了什么?cookie呢?上面的uid=xxxxxx呢?美女呢?好吧,都在下面。

4.cookie是什么?就是人家服务器判断你是否登录的凭证,没登陆就抢金币么?想金币想疯了么?所以,我们得让服务器知道,我是个登陆了的人,把cookie给人家就是了。但是。。。要想获取cookie,我还得发送登陆请求,而且尼玛还有登陆验证码,这活儿没法干了!这时,一个美女头像浮现在我脑海中,她说,你去chrome的设置里面看看。于是我在chrome设置里发现了这个:

技术分享

哼哼,有点儿意思。这说明登陆过的cookie保存着呢,我读取出来不就有cookie了吗?于是我找到了这个:

技术分享

打开它:

技术分享

尼玛,全是乱码,不过我看到SQLite几个字母猥琐的出现在了那里,这是传说中的sqlite数据库吗?于是我抱着试试看的态度买了一个疗程。。。。不是,于是我踏上了sqlite数据库读取之路。在网上找了这俩东西,导入了项目中:

技术分享

DataTable dt = SqlLiteHelper.ExecuteSql(@"select * from cookies where host_key like '%emuch%'");

    public class SqlLiteHelper
    {
        public static string connectionString = @"Data Source=C:\Users\xxxxxxxx\AppData\Local\Google\Chrome\User Data\Default\Cookies";
        public static DataTable ExecuteSql(string sql)
        {
            using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
            {
                conn.Open();
                var cmd = conn.CreateCommand();
                cmd.CommandText = sql;

                using (var reader = cmd.ExecuteReader())
                {
                    var dataTable = new DataTable();
                    dataTable.Load(reader);
                    conn.Close();
                    return dataTable;
                }

            }
        }
    }

通过上面代码,我轻松的获取了cookie数据,还有上面提到的uid=xxxxxx,不信你看:

技术分享

于是,我快乐的拿着cookie和post数据去一键领金币去了:

rq = new HttpRequestParameter();
            string uid = "";
            HttpCookieType cookies = new HttpCookieType();
            CookieCollection cc = new CookieCollection();
            foreach (DataRow dr in dt.Rows)
            {
                Cookie cookie = new Cookie();
                cookie.Name = dr["name"].ToString();
                cookie.Value = dr["value"].ToString().Replace(",", "%2C");//cookie value中存在逗号会报错,不知道为什么?把逗号换成%2C就行了
                cookie.Domain = dr["host_key"].ToString();
                cc.Add(cookie);
                if (cookie.Name.Equals("_discuz_uid"))
                    uid = cookie.Value;
            }
            cookies.CookieCollection = cc;
            rq.Cookie = cookies;
            rq.IsPost = true;
            rq.Encoding = Encoding.Default;

            rq.Url = string.Format(@"http://emuch.net/bbs/memcp.php?action=getcredit&uid={0}",uid);
            rp = http.Excute(rq);
下面看一下战果吧:

技术分享

没错,界面就是这么酷炫!界面采取左、中、右的经典布局,意图达到让你一看就想吐的效果。其中,就左界面有用,中、右是调试用来着。

本文马上要结束了,http请求工具类是网上下的,大神,对不住了,直接用了。

以后可以愉快的抢金币了。

完。


对了,本程序默认网站登录的cookie在本地存着不是吗?所以,要想用正确的姿势抢金币,你必须用chrome浏览器成功登陆过。

完。




c#实现到某网站自动领金币功能

标签:

原文地址:http://blog.csdn.net/blogtime/article/details/45044197

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!