标签:
需求分析
小木虫是我学生时代经常浏览的论坛,这个站主要以学术讨论为主,那时在这上面还是学到了很多论文方面的姿势的。
每次登陆论坛都忘不了上面的“每日红包”功能,每人每天有一次领金币的机会,金币赞起来可以干很多事情的。渐渐地,我长大了,虽然还是经常登陆论坛去看看,但“每日红包”功能由于步骤“复杂”(需要点击好几下鼠标才能领到),而且金币对我来说也没多大意义了,我的金币便再也没有增加过。直到前天,我需要金币的时候,我才知道币到用时方恨少。如果上天能再给我一次机会。。。因此,我做出了一个重要的决定,重拾“每日红包”功能,而且,这次我是以全方位立体式高逼格方式去领红包。卧槽,跑题了,这是需求分析么?
概要设计
无。
详细设计
无。
。
。
。
好了,我实在装不下去了,下面进入正题。
正题
我想不通过“打开网页,进入论坛,每日红包,选择类型,提交”这一系列步骤就能领到金币,我想点击一个按钮就领到金币,我想很方便的领到金币,我想要很多很多美女。。。,尼玛又跑题了。
社么?通过点击按钮,发送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和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浏览器成功登陆过。
完。
标签:
原文地址:http://blog.csdn.net/blogtime/article/details/45044197