C#实现秒杀器之网站登录
秒杀本来是网络游戏里的一个词,自从2009年9月26日淘宝网举行的一元秒杀包邮笔记本电脑的事件后,现在的秒杀更多指的是网络抢购。
自从4月份在园子里发表了一篇 《《socket 实现淘宝秒杀器(抢拍器) 附源码与截图》》文章后,后来有好多园子里和其他网友都问我关于秒杀器的事情。
本人虽然是个写程序的(其实很烂),但本人也运营秒杀网(http://www.miaosha.cc/)认为是广告的不要点,哈哈,所以对电子商务互联网这块关注的也比较多,互联网上有什么新鲜事,我都能早早的了解。
几天前得知农夫山泉又花大钱做秒杀活动,秒杀的商品很诱人,但有点的门槛,看到这些诱人的宝贝,又让我投入针对农夫山泉网站的秒杀研究中。
贴个图吧,但不是广告哦:
切入正题,
如何实现秒杀器步骤如下:
据我所知 ASP.NET程序的网站和非asp.net的网站的数据提交有点不一样。
第一步、抓包(推荐用httpwatch或者用火狐插件 live http headers 我个人比较喜欢后者)
第二步、获得需要的数据 post到验证页面 然后保存返回的Cookies
第三步、带上获取到的Cookies去访问需要登录的页面(当然提交订单的那个页面也是需要带上这个Cookies的)
下面就以登录农夫山泉水溶C100秒杀活动为例,登录地址:
通过抓包得知 登录该网站需要如下的数据:
其实下面这一长串数据只有4个键值对的数据有用,其他的都可以不要,但为了保险期间,我抓到多少数据包提交给服务器,我就提交多少,一个不少。嘿嘿。
下面红色的标记的就是我们登入到该网站所必须的数据包。
注意看下都是键值对的形式
如:
ctl00%24ContentPlaceHolder1%24login_email=这是我的用户名
ctl00%24ContentPlaceHolder1%24login_pwd=这是我的密码
由于这个是asp.net的网站而且这个网站估计用了模板页才导致用户名和密码的名字如此之长。
由于是asp.net的网站 还需要一起带上__VIEWSTATE 以及__EVENTVALIDATION的值,否则你是登入不了的。
其他的数据如果你看着不爽,你就卡擦掉吧。
带上这些数据 我们登入他的网站
之前的那篇文章用的是socket去实现的,但这片文章我用
HttpWebRequest request与HttpWebResponse response 等对象去实现。
下面来讲我具体是如何登录到系统的:
登录的地址:
需要提交的数据在上面贴出来了。
贴登入的代码
其中postUrl就是上面的网址,postString 就是上面的一对代码。
方法返回波尔值 登录成功后获得服务器发送到客户端的Cookies,并保存起来,下一步用的着,浏览其他需要登录后才能浏览的页面需要带上这个Cookies
全局变量里我定义了一个 ,用来保存Cookies的。
代码中有些变量声明 我是全局定义的如:
如果对此感兴趣 你也可以跟我交流哈。。。。顺便说下 淘宝网又要秒汽车了。。。哈哈。
下一篇:C#实现做秒杀器系列之二 如何去提交订单
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest request = null;
HttpWebResponse response = null;
private bool login(string postUrl, string postString)
{
bool loginFlag = false;
byte[] postData = Encoding.UTF8.GetBytes(postString);
request = WebRequest.Create(postUrl) as HttpWebRequest;
request.Method = "POST";
request.KeepAlive = false;
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = cookieContainer;
request.ContentLength = postData.Length;
// 提交请求数据
using (System.IO.Stream outputStream = request.GetRequestStream())
{
outputStream.Write(postData, 0, postData.Length);
outputStream.Close();
response = request.GetResponse() as HttpWebResponse;
using (System.IO.Stream responseStream = response.GetResponseStream())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("utf-8")))
{
string srcString = reader.ReadToEnd(); // 接收返回的页面
//只要登录成功后,如果返回的源代码里面有退出的字样,那说明登入成功了。
if (srcString.IndexOf("退出") > 0)
{
loginFlag = true;
//请在此处保存cookieContainer,浏览其他需要登录的页面需要带上它
}
}
}
}
return loginFlag;
}
#endregion