【秒杀软件原理】Iphone抢购器、秒杀软件,原理适用于其他网络上的秒杀、抢购 您所在的位置:网站首页 高中学生省钱技巧 【秒杀软件原理】Iphone抢购器、秒杀软件,原理适用于其他网络上的秒杀、抢购

【秒杀软件原理】Iphone抢购器、秒杀软件,原理适用于其他网络上的秒杀、抢购

2022-10-20 04:26| 来源: 网络整理| 查看: 265

淘宝上有这种工具,大家可以到淘宝上看看

需要用到工具:

1. Delphi7:开发工具,你懂的。

2.HttpWatch:http请求监控软件,可以查看浏览器具体发出去和收到的数据包。

需要用到的类

1.TAdvStringGrid:我用这个Grid主要是用来显示进度条。当然,你也可以用别的

2.TidHttp:网络请求就靠它了,当然你也可以自己去组织HTTP协议,本人比较懒,用的现成的。

3.TIdCookieManager:管理会话用的Session及Cookie

4.TIdSSLIOHandlerSocketOpenSSL:https开头的,你懂,这里需要两个Dll(libeay32.dll, ssleay32.dll)

5.TThread:多线程,多个账号同时抢

6.其它的控件就不说了。TButton,TForm之类的。

下边,把这个线程类贴出来,界面实现就不贴了,自己动手吧。

unit Http; interface uses Classes, idHTTP, SysUtils, Types, IdIOHandler, IdIOHandlerSocket, IdTStrings, IdSSLOpenSSL, IdCookieManager, StrUtils, Graphics, Windows; type TUser = packed record ID : Integer; UserName : string; IDNO : string; Account : string; Password : string; Skuid : string; Store : string; end; THttp = class(TThread) private { Private declarations } FUser : TUser; //每个线程有一个TUser的对象,里边包含这个线程需要用到的账号的所有信息:身份证号、姓名、登陆账号、登陆密码。。。。。 FImage : TMemoryStream; //这个东西用来存验证码的图片,苹果的验证码机器不好识别,所以需要存到这里,等人工输入 FVCode : string; FDate : string; FTime : string; FThreadID : Integer; FTempMsg : String; FStep : Integer; http : TidHttp; cookie: TIdCookieManager; ssl : TIdSSLIOHandlerSocketOpenSSL; RedirectUrl : string; procedure AppleReserv;//线程开始时就执行这个 procedure Getcookie; //需要提前输入一些会话信息 function GetMethod(URL: String; Max: Integer): String;//HTTP中的GET function PostMethod(PostUrl: String; PostData: TIdStrings; max: Integer): String; //HTTP中的POST function GetURLList(Data: String): TStringList; //取得网页中的所有连接,网上现成的函数,借用一下 procedure InitHttp;//初始化HTTP procedure UpdateCookie(CookieName, Value: string); //更新COOKIE procedure httpRedirect(Sender: TObject; var dest: String; var NumRedirect: Integer; var Handled: Boolean; var VMethod: TIdHTTPMethod); //有时候需要把重定向的连接记录下来 procedure UpdateUI; //更新界面显示 function Split(Data, Node: String): TStringList;//分割字符串 procedure UpdateStep(msg : string; step : Integer);//更新进度条 procedure ShowError; //显示错误信息 function DeleteHtmlTag(HtmlSourch : string) : string; //删除HTML标签,提取网页内容 protected procedure Execute; override; public property VCode : string read FVCode write FVCode; property Image : TMemoryStream read FImage; property TempMsg : string read FTempMsg; property ThreadID : Integer read FThreadID write FThreadID; constructor Create(CreateSuspended : Boolean; id : Integer; User : TUser); overload; end; //编码转换 function DecodeUtf8Str(const S: UTF8String): WideString; //取指定标签的某属性值 function ExtractHtmlTagValues(const HtmlText: string; TagName, AttribName: string; var Values: TStringList): integer; //用已知的属性值取另外一个属性值 function GetAttributeByName(const HtmlText: string; TagName, AttribName, KnownAttrName, KnowAttrValue: string): string; implementation uses Main; { THttp } constructor THttp.Create(CreateSuspended: Boolean; id : Integer; User : TUser); begin FThreadID := id; FUser := User; FStep := 0; InitHttp; inherited Create(CreateSuspended); FreeOnTerminate := True; end; procedure THttp.Execute; begin { Place thread code here } try AppleReserv; except on e : Exception do begin FTempMsg := e.Message; Synchronize(ShowError); end; end; end; //初始化TidHttp procedure THttp.InitHttp; begin http := TidHttp.Create; cookie := TIdCookieManager.Create(nil); http.CookieManager := cookie; http.AllowCookies := True; http.HandleRedirects := True; http.HTTPOptions := [hoKeepOrigProtocol]; http.ProtocolVersion := pv1_1; http.OnRedirect := httpRedirect; //http.ProxyParams.ProxyServer := '127.0.0.1'; //可以选择试用代理服务器 //http.ProxyParams.ProxyPort := 8000; http.Request.SetHeaders; http.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; http.Request.AcceptEncoding := 'identity'; http.Request.AcceptCharSet := 'GB2312,utf-8;q=0.7,*;q=0.7'; http.Request.AcceptLanguage := 'zh-cn,zh;q=0.5'; http.Request.CustomHeaders.Add('Keep-Alive: 115'); http.Request.CustomHeaders.Add('Connection: keep-alive'); http.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17'; //我模拟的Firefox的浏览器,你可以选择别的。 end; function THttp.GetMethod(URL: String; Max: Integer): String; var RespData: TStringStream; begin RespData := TStringStream.Create(''); ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil); ssl.SSLOptions.Method := sslvSSLv3; try try http.IOHandler := ssl; http.Get(URL, RespData); Result := RespData.DataString; except Dec(Max); if Max = 0 then begin Result := ''; Exit; end; Result := GetMethod(URL, Max); end; finally FreeAndNil(RespData); FreeAndNil(ssl); end; end; function THttp.PostMethod(PostUrl: String; PostData: TIdStrings; max: Integer): String; var RespData : TMemoryStream; begin ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil); ssl.SSLOptions.Method := sslvSSLv3; RespData := TMemoryStream.Create; try try if http = nil then Exit; http.IOHandler := ssl; Http.Post(PostUrl, PostData, RespData); SetLength(Result, RespData.Size); RespData.Position := 0; //RespData.Read(Pointer(Result)^,RespData.Size)\ Result := PChar(RespData.Memory); except Dec(Max); if Max = 0 then begin Result := ''; Exit; end; Result := PostMethod(PostUrl, PostData, Max); end; finally http.Disconnect; FreeAndNil(ssl); FreeAndNil(RespData); end; end; procedure THttp.Getcookie; begin try //svi cookie.AddCookie('dfa_cookie=applecnglobal', '.apple.com'); cookie.AddCookie('s_cc=true', '.apple.com'); cookie.AddCookie('s_invisit_us=retail%3Dtrue%3B', '.apple.com'); cookie.AddCookie('s_orientation=%5B%5BB%5D%5D', '.apple.com'); cookie.AddCookie('s_orientationHeight=8', '.apple.com'); cookie.AddCookie('s_pathLength=retail%3D1%2C', '.apple.com'); cookie.AddCookie('s_ppv=Reserve%2520%2526%2520Wrap%2520-%2520Choose%2520a%2520store%2520%2528CN%2529%2C100%2C100%2C8%2C', '.apple.com'); cookie.AddCookie('s_pv=Reserve%20%26%20Wrap%20-%20Choose%20a%20store%20(CN)', '.apple.com'); cookie.AddCookie('s_ria=Flash%2010%7C', '.apple.com'); cookie.AddCookie('s_sq=%5B%5BB%5D%5D', '.apple.com'); cookie.AddCookie('s_vnum_us=ch%3Dretail%26vn%3D1%3B', '.apple.com'); except end; end; procedure THttp.UpdateCookie(CookieName, Value : string); var i : integer; begin cookie.CookieCollection.Cookie[CookieName, '.apple.com'].Value := Value; Exit; for i := 0 to cookie.CookieCollection.Count -1 do begin if cookie.CookieCollection.Items[i].CookieName = CookieName then begin cookie.CookieCollection.Delete(i); break; end; end; cookie.AddCookie(CookieName + '=' + Value, '.apple.com'); end; procedure THttp.AppleReserv; var Param : TIdStrings; tmplist : TStringList; NextLink, result, sno, tmpstr : string; i, n, tmpcnt : integer; label e; begin UpdateStep('正在连接....', 0); Getcookie; tmpcnt := 0; n := 0; while (1=1) do begin result := GetMethod('http://reserve.apple.com/WebObjects/ProductReservation.woa/wa/reserveProduct?lang=zh&country=CN', 2); result := UTF8Decode(result); tmpstr := result; i := Pos('


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有