zoukankan      html  css  js  c++  java
  • C# Socket 实现的淘宝秒杀器(抢拍器)

     using System;
     using System.Collections;
     using System.Configuration;
     using System.Data;
     using System.Web;
     using System.Web.Security;
     using System.Web.UI;
     using System.Web.UI.HtmlControls;
     using System.Web.UI.WebControls;
     using System.Net;
     using System.Net.Sockets;
     using System.Text;
     using System.Threading;
     using System.IO;
     using System.Text.RegularExpressions;
     
     public partial class MiaoSha : System.Web.UI.Page
     {
         string strServer = string.Empty;
         string strPath = string.Empty;
     
         protected void Page_Load(object sender, EventArgs e)
         {
            
         }
     
         public static String Recv(Socket sock, Encoding encode)
         {
             Byte[] buffer = new Byte[8192];
             StringBuilder sb = new StringBuilder();
     
             Thread.Sleep(50);//根据页面响应时间进行微调
             Int32 len = sock.Receive(buffer);
             sb.Append(encode.GetString(buffer, 0, len));
     
             while (sock.Available > 0)
             {
                 Thread.Sleep(300);//也可以视情况微调
                 Array.Clear(buffer, 0, buffer.Length);
                 len = sock.Receive(buffer);
                 sb.Append(encode.GetString(buffer, 0, len));
                 string ss = encode.GetString(buffer, 0, len);
             }
             sock.Close();
             return sb.ToString();
         }
     
         /// <summary>
         /// Socket获取页面HTML同时返回头信息
         /// </summary>
         /// <param name="server">服务器地址或主机名</param>
         /// <param name="url">请求的页面</param>
         /// <param name="method">post or get</param>
         /// <param name="data">提交的数据</param>
         /// <param name="Cookies">Cookies</param>
         /// <returns>返回页面的HTML</returns>
         public string GetHtml(string server, string url, string method, string data, string Cookies)
         {
             string _method = method.ToUpper();
             string _url = string.Empty;
             if (url == "")
             {
                 _url = "/";
             }
             else if (url.Substring(0, 1) != "/")
             {
                 _url = "/" + url;
             }
             else
             {
                 _url = url;
             }
             string formatString = string.Empty;
             string sendString = string.Empty;
             Encoding ASCII = Encoding.Default;
     
             //以下是拼接的HTTP头信息
             if (_method == "GET")
             {
                 formatString = "";
                 formatString += "{0} {1} HTTP/1.1\r\n";
                 formatString += "Host: {2}\r\n";
                 formatString += "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7\r\n";
                 formatString += "Accept: text/html\r\n";
                 formatString += "Keep-Alive: 300\r\n";
                 formatString += "Cookies:{3}\r\n";
                 formatString += "Connection: keep-alive\r\n\r\n";
                 sendString = string.Format(formatString, _method, _url, server, Cookies);
             }
             else
             {
                 formatString = "";
                 formatString += "{0} {1} HTTP/1.1\r\n";
                 formatString += "Host: {2}\r\n";
                 formatString += "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7\r\n";
                 formatString += "Accept:text/html\r\n";
                 formatString += "Content-Type:application/x-www-form-urlencoded\r\n";
                 formatString += "Content-Length:{3}\r\n";
                 formatString += "Referer:http://buy.taobao.com/auction/buy_now.jhtml";
                 formatString += "Keep-Alive:300\r\n";
                 formatString += "Cookies:{4}\r\n";
                 formatString += "Connection: keep-alive\r\n\r\n";
                 formatString += "{5}\r\n";
                 sendString = string.Format(formatString, _method, _url, server, Encoding.Default.GetByteCount(data), Cookies, data);
             }
     
             Byte[] ByteGet = ASCII.GetBytes(sendString);
             Byte[] RecvBytes = new Byte[1024];
             String strRetPage = null;
             IPAddress hostadd = Dns.Resolve(server).AddressList[0];
             IPEndPoint EPhost = new IPEndPoint(hostadd, 80);
             Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             s.Connect(EPhost);
             if (!s.Connected)
             {
                 strRetPage = "链接主机失败";
                 return strRetPage;
             }
             s.Send(ByteGet, ByteGet.Length, SocketFlags.None);
     
             strRetPage = Recv(s, ASCII);
     
             return strRetPage;
         }
     
         protected void btnLogin_Click(object sender, EventArgs e)
         {
             string u = this.txtUserName.Text.Trim();
             string p = this.txtPwd.Text.Trim();
             DateTime st = DateTime.Now;
     
             //淘宝登录需要post的数据串
             string sendData = "TPL_username=" + u + "&TPL_password=" + Server.UrlEncode(p) + "&actionForStable=enable_post_user_action&action=Authenticator&mi_uid=&mcheck=&TPL_redirect_url=http%3A%2F%2Fitem.taobao.com%2Fauction%2Fitem_detail-0db1-3036113cf5455bd74047f1a581ba4be7.htm&_oooo_=http%3A%2F%2Fitem.taobao.com%2Fauction%2Fitem_detail-0db1-3036113cf5455bd74047f1a581ba4be7.htm&event_submit_do_login=anything&abtest=&pstrong=3&from=&yparam=&done=&loginType=3&tid=&support=000001&CtrlVersion=1%2C0%2C0%2C7";
     
             string s = GetHtml("login.taobao.com", "/member/login.jhtml", "post", sendData, "");
             Session["Cookies"] = GetCookies(s); //从返回的源码中提取 cookies,抓取登录后的页面需要附上该cookies 
     
         }
         protected void btnBuy_Click(object sender, EventArgs e)
         {
             string strURL = this.txtURL.Text.Trim();
             getServerAndPath(strURL);
     
             string s = GetHtml(strServer, strPath, "get", "", Session["Cookies"].ToString());
             //Response.Write(s);
             if (s.IndexOf("立即购买") > 0)
             {
                 string item_id = strURL.Split('-')[2].Split('.')[0].ToString();
                 string x_id = strURL.Split('-')[1].ToString();
     
                 s = GetHtml("buy.taobao.com", "/auction/buy.htm?from=itemDetail&item_id=" + item_id + "&x_id=" + x_id, "get", "", Session["Cookies"].ToString());
                 //Response.Write(s);
                 using (StreamWriter sw = new StreamWriter(Server.MapPath("debug1.html")))
                 {
                     sw.Write(s);
                 }
     
                 if (s.IndexOf("确认提交订单") > 0)
                 {
                     Session["Cookies"] = GetCookies(s);
                     string postData = getPostData(s);
                     string r = GetHtml("buy.taobao.com", "/auction/buy_now.htm", "post", postData, Session["Cookies"].ToString());
                     if (r.IndexOf("302") > 0)
                     {
                         using (StreamWriter sw = new StreamWriter(Server.MapPath("debug2.html")))
                         {
                             sw.Write(r);
                         }
                     }
                     else
                     {
                         ////
                     }
                     using (StreamWriter sw = new StreamWriter(Server.MapPath("debug2.html")))
                     {
                         sw.Write(r);
                     }
                 }
             }
             else if (s.IndexOf("btn-wait") > 0)//该宝贝还处于定时上架的状态
             { 
                 
             }
     
         }
     
     
         /// <summary>
         /// 从返回的源代码中提取cookies
         /// </summary>
         /// <param name="s"></param>
         /// <returns></returns>
         private string GetCookies(string s)
         {
             StringBuilder sbCookies = new StringBuilder();
     
             string[] arr = s.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
             foreach (string str in arr)
             {
                 if (str.StartsWith("Set-Cookie: "))
                 {
                     int intStart = str.IndexOf(";");
                     string strCookie = str.Substring(12, intStart - 11);
                     sbCookies.Append(strCookie);
                 }
             }
             return sbCookies.ToString();
         }
     
         private string GetLocationURL(string s)
         {
     
             string RtnString = string.Empty;
             StringBuilder sbCookies = new StringBuilder();
     
             string[] arr = s.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
             foreach (string str in arr)
             {
                 if (str.StartsWith("Location: "))
                 {
                     RtnString = str.Substring(11, str.Length - 11);
                 }
             }
             return RtnString;
         }
     
     
     
         private void getServerAndPath(string strURL)
         {
             if (strURL != "" && strURL.IndexOf("/") > 0)
             {
                 int SlashPos = strURL.Substring(7).IndexOf("/");
                 strServer = strURL.Substring(7, SlashPos);
                 strPath = strURL.Substring(SlashPos + 7);
             }
             else
                 return;
         }
     
     
     
         /// <summary>
         /// 从最后确认购买页面的源代码中提取表单数据的数据
         /// </summary>
         /// <param name="html"></param>
         /// <returns></returns>
         private string getPostData(string html)
         {
             string postStr = "";
             string pat = "<input .*?name.{0,1}=.{0,1}\"(.*?)\".*? value.{0,1}=\"(.*?)\".*?>";
             Regex regex = new Regex(pat, RegexOptions.Multiline | RegexOptions.IgnoreCase);
             MatchCollection mcollection = regex.Matches(html);
     
             foreach (Match m in mcollection)
             {
                 GroupCollection gcollection = m.Groups;
                 if (m.ToString().IndexOf("_fma.b._0.s") > 0) { continue; }
                 if (m.ToString().IndexOf("_fma.b._0.c") > 0) { continue; }
                 if (m.ToString().IndexOf("isCheckCode") > 0 && gcollection[2].Value.ToLower() == "true")
                 {
                     //isCheckCode = true;
                 }
                 postStr += gcollection[1].Value; postStr += "=";
                 postStr += Server.UrlEncode(gcollection[2].Value);
                 postStr += "&";
             }
             postStr += "n_prov=370000&n_city=370500&n_area=370522&_fma.b._0.w=quicky&_fma.b._0.ac=250&consignment=10&_fma.b._0.au=5&_fma.b._0.c=8888";
             postStr = postStr.Replace("quantity=0", "quantity=1").Replace("_fma.b._0.d=您不必重复省-市-区信息;至少5个字", "_fma.b._0.d=" + Server.UrlEncode("收货人的具体地址")).Replace("_fma.b._0.po=", "_fma.b._0.po=230031").Replace("_fma.b._0.de=", "_fma.b._0.de="+Server.UrlEncode("啊峰")).Replace("_fma.b._0.u=", "_fma.b._0.u=0").Replace("_fma.b._0.di=1", "_fma.b._0.di=370522").Replace("_fma.b._0.deli=", "_fma.b._0.deli=13888888888");
             postStr += "&_fma.b._0.s=2";
             //postStr = Server.UrlEncode(postStr);
     
             return postStr;
         }
     }
  • 相关阅读:
    JAVA安装
    capture格式布局
    CSS样式表
    进制的转换
    CentOs7设置主机名称,以及主机名称和ip的对应关系
    CentOS7中NAT网卡设置静态IP
    CentOs7安装配置JDK
    基于Go语言构建区块链:part5
    基于Go语言构建区块链:part4
    BoltDB使用笔记
  • 原文地址:https://www.cnblogs.com/chengulv/p/2877383.html
Copyright © 2011-2022 走看看