admin 管理员组

文章数量: 1087139


2024年3月14日发(作者:异步fifo判断空满)

//已知BUG

//Preprocess 函数 所得出的密码有些错误,比如:QQ密码为16位,有各种字符的,就

可能登录失败

// 可能是Delphi MD5算法的原因,我用VC2005来试过,没有错误.由于工作太忙

// 没有时间细细检查,还在麻烦大家试试

}

unit WebQQFunction;

interface

uses

Windows, SysUtils, Classes, StdCtrls, IdBaseComponent, IdComponent, StrUtils,

ExtCtrls,

IdTCPConnection, IdTCPClient, IdHTTP, jpeg, IdAuthentication, IdHash,

IdHashMessageDigest,

PublicFunctions, IniFiles, Forms, ComCtrls, SHDocVw, Dialogs, Variants,

DateUtils;

const

//QQ校友农场

C;

//QQ空间农场

C;

//登录用的字符串

C;

C+

'login&fp=&h=1&ptredirect=1&ptlang=0&from_ui=1&dumy=1';

//操作农场时,IdHTTP Referer 的值 通过GetFlaseVersion得到 IdHTTP Referer的

全部字串

C;

//FarmKey的形式

C;

//读取好友列表

C;

//自己ID,名字,时间,对方名称,farmKey

C;

//Cookie的组成

C;

//升一级加多少经验

CONST_OneLevelNum = 200;

//取FarmKey时,时间延后多少秒

Const_DelayFarmTime = 10;

type

//背包类型 0仓库 1商店 2包裹

TBagsType = (farm_Warehouse, farm_Goods, farm_Bag);

//动作类型 0偷取 1杀虫 2浇水 3除草 4收获

// 5松土 6种植 7全部卖出 8购买种子

// 9查看消息 10所有动作(在PostAction中没有实现义意,不作操作)

TActionType

Action_clearWeed,

=(Action_scrounge, Action_spraying, Action_water,

Action_harvest, Action_scarify, Action_planting, Action_Sale, Action_SaleAll,

Action_Buy, Action_getAllInfo, Action_ALL_OPP);

var

QQ_Cookie, VerifySession, farmKey, ConnHost,

Cookie_pt2gguin, Cookie_uin, Cookie_skey, Cookie_ptcz,

Cookie_pvid, Cookie_name, FlaseVersion: string;

farmTime, Cookie_pst: int64;

//服务器时间 本地时间 本地时间与服务器的时间差

QQ_ServerTime, Loc_ServerTime, DelayedDpikeInt : integer;

//将本地时间转成QQ服务器时间

function DateTimeToServerTime(aDateTime: TDateTime): integer;

function Preprocess(aPassWord, aVerifyCode:string):string;

//取得Flash版本 通过GetFlaseVersion得到 IdHTTP Referer的全部字串

procedure GetFlaseVersion(var aStr: string);

//取得验证码

function GetVerifyPic(aIdHTTP:TIdHTTP; var aImage: TImage): boolean;

//将汉字转换为unicode码

function AnsiToUnicode(aSubWideChar: PWideChar):string;

//将unicode码转换为汉字

function UnicodeToAnsi(aSubUnicode: string):string;

//提取字符串

function SubString(aInputStr, aStr_L, aStr_R:string):string;

function HashStr2BinStr(Hash: string):string;

function Fmd5(str: string):string;

//以Web形式登录QQ

function LoginQQ(aIdHTTP: TIdHTTP; aUserNameStr, aPasswordStr, aVerifyStr:

string; var aWebStr: string): Boolean;

//登录QQ校友社区

function LoginQQxiaoyou(aIdHTTP: TIdHTTP): Boolean;

//取自己农场数据

function GetMyFarmLandDB(aIdHTTP: TIdHTTP; var aWebStr: string): Boolean;

//取好友列表数据

function GetFriendsListDB(aIdHTTP: TIdHTTP; var aWebStr: string): Boolean;

//取好友农场数据

function GetFriendFarmLandDB(aIdHTTP: TIdHTTP; aUserID: integer; var

aWebStr: string): Boolean;

//计算等级 返回等级

function ResultLevel(aSumExp:integer; var aNowExp, aOutLevelMaxExp:

integer): integer;

//分析仓库商店背包数据 aType 0仓库1商店2背包

function PostBagsBD(aIdHTTP:TIdHTTP; var aWebStr: string;

TBagsType): boolean;

//动作类型 0偷取 1杀虫 2浇水 3除草 4收获

// 5松土 6种植 7全部卖出 8购买种子

// 9查看消息 10所有动作(在PostAction中没有实现义意,不作操作)

//

//aActionType动作类型 是种植卖出购买种子还是做什么在此赋值

//aOwnerId是自己的UserID 必须为自己的UserID

//aPlace为地块的序号,从0开始 不用时可为0

//aSeedID 为作物种子的aID 种植卖出购买种子时用到 不用时可为0

aType:

function PostAction(aIdHTTP: TIdHTTP; var aWebStr: string; aActionType:

TActionType;

aOwnerId, aPlace, aSeedID: integer): boolean;

//取得farmKey

function GetfarmKey(aInputTimeInt: Int64; var aFarmTime: int64; var aFarmKey:

string): Boolean;

//写日志文件

procedure WriteLog(aQQnum, aLogStr, aAppPah: String);

implementation

//将本地时间转成QQ服务器时间 getTime() 方法傳回從 1970 年 1 月 1 日午夜

開始計算的毫秒數

function DateTimeToServerTime(aDateTime: TDateTime): integer;

begin

Result:= DateTimeToUnix(aDateTime)-28800;

end;

//提取字符串

function SubString(aInputStr, aStr_L, aStr_R:string):string;

var

sPosB,sPosE:integer;

Lwhtml,LwCstr_L,LwCstr_R:string;

begin

Result:='';

if Trim(aInputStr)='' then

Exit;

Lwhtml:= LowerCase(aInputStr);

LwCstr_L := LowerCase(aStr_L);

LwCstr_R := LowerCase(aStr_R);

sPosB:= Pos(LwCstr_L, Lwhtml) + Length(LwCstr_L);

sPosE:= PosEx(LwCstr_R, Lwhtml, sPosB);

if (sPosB0) then

Result:=Copy(aInputStr, sPosB, sPosE-sPosB);

end;

function HashStr2BinStr(Hash:string):string;

var

buf:array[0..63] of Char;

i:Integer;

begin

Result:='';

FillChar(buf, SizeOf(buf),0);

SetLength(Result, Round(Length(Hash)/2));

FillChar(Result[1], Length(Result),0);

HexToBin(PChar(Hash), buf,SizeOf(buf));

for i:=0 to Round(Length(Hash)/2)-1 do

Result:= buf;

end;

function Fmd5(str:string):string;

var

md5 : TIdHashMessageDigest5;

longWordRec : T4x4LongWordRecord;

begin

md5 := ;

try

{$IFDEF ID10}

Result:= ringAsHex(str);

{$ELSE}

longWordRec:= lue(str);

Result:= (longWordRec);

{$ENDIF}

finally

;

end;

end;

function md5_3(str:string):string;

begin

Result:= Fmd5(str);

Result:= HashStr2BinStr(Result);

Result:= Fmd5(Result);

Result:= HashStr2BinStr(Result);

Result:= Fmd5(Result);

end;

function Preprocess(aPassWord, aVerifyCode:string):string;

begin

Result:= Fmd5(md5_3(aPassWord) + UpperCase(aVerifyCode));

end;

//取得Flash版本

procedure GetFlaseVersion(var aStr: string);

var

tmpGerVersion: string;

tmpIdHTTP: TIdHTTP;

RespData: TStringStream;

begin

try

RespData:= ('');

tmpIdHTTP:= (Application);

tmpGerVersion:= Const_Flase_Version+'';

(tmpGerVersion, RespData);

tmpGerVersion:= Utf8ToAnsi(ring);

tmpGerVersion:= SubString(tmpGerVersion, 'name="main" url="module/', '"');

if pos('?v=', tmpGerVersion)=0 then

tmpGerVersion:= '?v=57';

aStr:= Const_Flase_Version + tmpGerVersion;

except

end;

;

end;

//取得验证码

function GetVerifyPic(aIdHTTP:TIdHTTP; var aImage: TImage): boolean;

var

ms:TMemoryStream;

pic:TJPEGImage;

begin

Result:=False;

try

ms:=;

try

ders;

;

:= '*/*';

Language:= 'zh-CN';

r:=

'/cgi-bin/login?link_target=blank&appid=15000102';

tType:= 'application/x-www-form-urlencoded';

Encoding:= 'gzip, deflate';

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1)';

tion:= 'Keep-Alive';

ontrol:= 'no-cache';

:= '';

:= Format('/getimage?aid=15000102&%0.15f', [Time()]);

:= '';

meout:= 15000;

( Format('/getimage?aid=15000102&%0.1

5f', [Time()]) , ms);

on:=0;

pic:=;

try

omStream(ms);

(pic);

finally

;

end;

QQ_Cookie:= '';

QQ_Cookie:= SubString(,

verifysession=', ';');

'Set-Cookie:

QQ_Cookie:= 'verifysession=' + QQ_Cookie + ';';

VerifySession:= QQ_Cookie;

;

('Cookie:'+QQ_Cookie);

Result:= True;

finally

;

end;

except

end;

end;

//转换

function Str_Gb2UniCode(text: string): String;

var

i,len: Integer;

cur: Integer;

t: String;

ws: WideString;

begin

Result := '';

ws := text;

len := Length(ws);

i := 1;

while i <= len do

begin

cur := Ord(ws);

FmtStr(t,'%4.4X',[cur]);

Result := Result + t;

Inc(i);

end;

end;

//将汉字转换为unicode码

function AnsiToUnicode(aSubWideChar: PWideChar):string;

var

tmpLen, iCount: integer;

begin

Result:= '';

tmpLen:= Length(aSubWideChar);

for iCount:= 1 to tmpLen do

Result:= Result + 'u'+IntToHex(Ord(aSubWideChar[iCount-1]), 2);

end;

//将unicode码转换为汉字

function UnicodeToAnsi(aSubUnicode: string):string;

var

tmpLen, iCount: Integer;

tmpWS: WideString;

begin

tmpWS := '';

iCount := 1;

tmpLen := Length(aSubUnicode);

while iCount <= tmpLen do

try

if (Copy(aSubUnicode, iCount, 1)='')and

(Copy(aSubUnicode, iCount, 2)='u') then //'u7effzqu75d5'

begin

tmpWS := tmpWS + WideChar(StrToInt('$' + Copy(aSubUnicode, iCount+2,

4)));

iCount := iCount+6;

end

else

begin

tmpWS := tmpWS + Copy(aSubUnicode, iCount, 1);

iCount := iCount+1;

end;

except

end;

Result := tmpWS;

end;

//以Web形式登录QQ

function LoginQQ(aIdHTTP: TIdHTTP; aUserNameStr, aPasswordStr, aVerifyStr:

string; var aWebStr: string): Boolean;

var

PostData, RespData: TStringStream;

tmpStr: string;

begin

PostData:=

[aUserNameStr,

( Format(Const_PostLoginInfo,

Preprocess(aPasswordStr, aVerifyStr),

aVerifyStr])

+ Const_PostLoginStr);

RespData:= ('');

Result:= False;

aWebStr:= '';

try

meout:= 15000;

:= 'image/gif, image/x-xbitmap, image/jpeg,

image/pjpeg, application/x-shockwave-flash, application/msword, */*';

tType:= 'application/x-www-form-urlencoded';

:= '';

r:=

'/cgi-bin/login?appid=15000102';

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1)';

Encoding:= 'gzip, deflate';

:= '/login';

//ders;

['Cookie'] := 'Cookie:'+QQ_Cookie;

('/login', PostData, RespData);

tmpStr:= Utf8ToAnsi(ring);

if pos('如果未能自动跳转,请

href="/?mod=login" target="_top">点击

成跳转。

', tmpStr)>0 then

begin

Result:= True;

tmpStr:=

pt2gguin=', ';');

SubString(, 'Set-Cookie:

Cookie_pt2gguin:= tmpStr;

tmpStr:= SubString(, 'Set-Cookie: uin=',

';');

Cookie_uin:= tmpStr;

tmpStr:= SubString(, 'Set-Cookie: skey=',

';');

Cookie_skey:= tmpStr;

tmpStr:= SubString(, 'Set-Cookie: ptcz=',

';');

Cookie_ptcz:= tmpStr;

QQ_Cookie:= QQ_Cookie + ' pt2gguin=' + Cookie_pt2gguin + '; uin=' +

Cookie_uin + '; skey=' +

Cookie_skey + '; ptcz=' + Cookie_ptcz + ';';

end

else if pos('超时', tmpStr)>0 then

aWebStr:= '连接超时或者页面出错!'

else if pos('验证码', tmpStr)>0 then

aWebStr:= '验证码错误!'

else if pos('密码', tmpStr)>0 then

aWebStr:= '密码错误!';

except

Result:= False;

aWebStr:= '连接超时或者页面出错!';

end;

;

;

end;

//登录QQ校友社区

function LoginQQxiaoyou(aIdHTTP: TIdHTTP): Boolean;

var

tmpStr: string;

begin

Result:= False;

try

:= 'image/gif, image/x-xbitmap, image/jpeg,

image/pjpeg, application/x-shockwave-flash, application/msword, */*';

tType:= 'application/x-www-form-urlencoded';

:= '';

r:= '/';

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1)';

Encoding:= 'gzip, deflate';

:= '/?mod=login';

tVersion:= 'x-flash-version: 10,0,22,87';

;

('Cookie:'+QQ_Cookie);

try

('/?mod=login');

except

end;

Randomize;

Cookie_pvid:= IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10))+

IntToStr(Random(10));

tmpStr:= SubString(, 'Set-Cookie: pst=',

';');

Cookie_pst:= StrToIntDef(tmpStr, 0)+84600*3;

tmpStr:= SubString(, 'Set-Cookie: name=',

';');

Cookie_name:= tmpStr;

QQ_Cookie:= QQ_Cookie + ' pst=' + IntToStr(Cookie_pst) + ';';

QQ_Cookie:= QQ_Cookie + ' name=' + Cookie_name + ';';

QQ_Cookie:= QQ_Cookie + ' schooltype=0; province=11;

pvid='+Cookie_pvid+'; flv=10.0;';

QQ_Cookie:= Format(Const_Cookie, [Cookie_pt2gguin, Cookie_uin,

Cookie_skey, Cookie_ptcz,

Cookie_pvid, Cookie_name, Cookie_pst]);

ders;

;

['Cookie'] := QQ_Cookie;

Result:= True;

except

end;

end;

//取自己农场数据

function GetMyFarmLandDB(aIdHTTP: TIdHTTP; var aWebStr: string): Boolean;

var

RespData: TStringStream;

begin

RespData:= ('');

Result:= False;

try

:= '*/*';

tType:= '';

:= ConnHost;

r:= FlaseVersion;

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1; Embedded Web Browser from: /; .NET CLR 2.0.50727)';

Encoding:= 'gzip, deflate';

:= '/?mod=user&act=run';

tVersion:= 'x-flash-version: 10,0,22,87';

QQ_Cookie:= Format(Const_Cookie, [Cookie_pt2gguin, Cookie_uin,

Cookie_skey, Cookie_ptcz,

Cookie_pvid, Cookie_name, Cookie_pst]);

;

['Cookie'] := QQ_Cookie;

try

(''+ConnHost+'/?mod=user&act=run', RespData);

except

end;

Result:= True;

aWebStr:= Utf8ToAnsi(ring);

except

end;

;

end;

//取好友列表数据

function GetFriendsListDB(aIdHTTP: TIdHTTP; var aWebStr: string): Boolean;

var

PostData, RespData, tmpRespData: TStringStream;

tmpaWebStr: string;

begin

farmTime:= DateTimeToServerTime(Now());

farmTime:= farmTime - Const_DelayFarmTime;

//取key

GetFarmKey(farmTime, farmTime, farmKey);

PostData:= ( Format(Const_FriendsRefresh,

farmKey]) );

RespData:= ('');

Result:= False;

try

[farmTime,

:= '*/*';

tType:= 'application/x-www-form-urlencoded';

:= ConnHost;

r:= FlaseVersion;

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1; Embedded Web Browser from: /; .NET CLR 2.0.50727)';

Encoding:= 'gzip, deflate';

:= '/?mod=friend';

tVersion:= 'x-flash-version: 10,0,22,87';

QQ_Cookie:= Format(Const_Cookie, [Cookie_pt2gguin, Cookie_uin,

Cookie_skey, Cookie_ptcz,

Cookie_pvid, Cookie_name, Cookie_pst]);

;

['Cookie'] := QQ_Cookie;

try

(''+ConnHost+'/?mod=friend',

RespData);

PostData,

except

end;

Result:= True;

aWebStr:= Utf8ToAnsi(ring);

if aWebStr='' then

aWebStr:= tmpaWebStr;

except

end;

;

end;

//取好友农场数据

function GetFriendFarmLandDB(aIdHTTP: TIdHTTP; aUserID: integer; var

aWebStr: string): Boolean;

var

RespData: TStringStream;

begin

RespData:= ('');

Result:= False;

try

:= '*/*';

tType:= '';

:= ConnHost;

r:= FlaseVersion;

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1; Embedded Web Browser from: /; .NET CLR 2.0.50727)';

Encoding:= 'gzip, deflate';

:=

'/?mod=user&act=run&flag=1&ownerId='+IntToStr(aUserID);

tVersion:= 'x-flash-version: 10,0,22,87';

QQ_Cookie:= Format(Const_Cookie, [Cookie_pt2gguin, Cookie_uin,

Cookie_skey, Cookie_ptcz,

Cookie_pvid, Cookie_name, Cookie_pst]);

;

['Cookie'] := QQ_Cookie;

try

(''+ConnHost+'/?mod=user&act=run&flag=1&ow

nerId='+IntToStr(aUserID), RespData);

except

end;

Result:= True;

aWebStr:= Utf8ToAnsi(ring);

except

end;

;

end;

//计算等级 返回等级

function ResultLevel(aSumExp:integer; var aNowExp,

integer): integer;

var

iCount, tmpExp, tmpLevelExp, tmpSumMaxExp: integer;

begin

iCount:= 0;

//当前等级经验

tmpExp:= aSumExp;

aOutLevelMaxExp:

//累计升级经验

tmpSumMaxExp:= CONST_OneLevelNum;

//当前等级升级经验

tmpLevelExp:= CONST_OneLevelNum;

if tmpSumMaxExp

begin

inc(iCount);

tmpExp:= tmpExp - tmpLevelExp;

end;

//如果当前等级升级经验 小于 累计经验

while tmpSumMaxExp

begin

tmpLevelExp:= tmpLevelExp + CONST_OneLevelNum;

//累计升级经验

tmpSumMaxExp:= tmpSumMaxExp + tmpLevelExp;

if tmpSumMaxExp

begin

inc(iCount);

tmpExp:= tmpExp - tmpLevelExp;

end;

end;

//返回当前等级经验

aNowExp:= tmpExp;

//返回当前等级升级经验

aOutLevelMaxExp:= (iCount+1)*CONST_OneLevelNum;

Result:= iCount;

end;

//取背包数据

function PostBagsBD(aIdHTTP:TIdHTTP; var aWebStr: string; aType:

TBagsType): boolean;

var

PostData, RespData: TStringStream;

tmpStr: string;

begin

farmTime:= DateTimeToServerTime(Now());

farmTime:= farmTime - Const_DelayFarmTime;

//取key

GetFarmKey(farmTime, farmTime, farmKey);

PostData:= ( Format(Const_farmKey,

farmKey]) );

[farmTime,

RespData:= ('');

Result:= False;

try

:= '*/*';

tType:= 'application/x-www-form-urlencoded';

:= ConnHost;

r:= FlaseVersion;

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1; Embedded Web Browser from: /; .NET CLR 2.0.50727)';

Encoding:= 'gzip, deflate';

tVersion:= 'x-flash-version: 10,0,22,87';

case aType of

farm_Warehouse : tmpStr:= '/?mod=repertory&act=getUserCrop';

farm_Goods : tmpStr:= '/?mod=repertory&act=getSeedInfo';

farm_Bag : tmpStr:= '/?mod=repertory&act=getUserSeed';

end;

:= tmpStr;

try

(''+ConnHost+tmpStr, PostData, RespData);

except

end;

Result:= True;

aWebStr:= Utf8ToAnsi(ring);

except

end;

;

end;

//动作类型 0偷取 1杀虫 2浇水 3除草 4收获

// 5松土 6种植 7全部卖出 8购买种子

// 9查看消息 10所有动作(在PostAction中没有实现义意,不作操作)

//

//aActionType动作类型 是种植卖出购买种子还是做什么在此赋值

//aOwnerId是自己的UserID 必须为自己的UserID

//aPlace为地块的序号,从0开始 不用时可为0

//aSeedID 为作物种子的aID 种植卖出购买种子时用到 不用时可为0

function PostAction(aIdHTTP: TIdHTTP; var aWebStr: string; aActionType:

TActionType;

aOwnerId, aPlace, aSeedID: integer): boolean;

var

PostData, RespData: TStringStream;

tmpGetStr: string;

begin

farmTime:= DateTimeToServerTime(Now());

farmTime:= farmTime - Const_DelayFarmTime;

//取key

GetFarmKey(farmTime, farmTime, farmKey);

PostData:= ( Format(Const_Action, [farmKey,

Cookie_name, aOwnerId, farmTime, Cookie_name, aPlace]) );

RespData:= ('');

Result:= False;

try

:= '*/*';

tType:= 'application/x-www-form-urlencoded';

:= ConnHost;

r:= FlaseVersion;

ent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT

5.1; SV1; Embedded Web Browser from: /; .NET CLR 2.0.50727)';

Encoding:= 'gzip, deflate';

tVersion:= 'x-flash-version: 10,0,22,87';

case aActionType of

//偷取

Action_scrounge : tmpGetStr:=

'/?mod=farmlandstatus&act=scrounge';

//喷虫

Action_spraying : begin

tmpGetStr:= '/?mod=farmlandstatus&act=spraying';

PostData:= ( Format('tId=0&'+Const_Action,

[farmKey, Cookie_name, aOwnerId, farmTime, Cookie_name, aPlace]) );

end;

//浇水

Action_water : tmpGetStr:= '/?mod=farmlandstatus&act=water';

//除草

Action_clearWeed:

'/?mod=farmlandstatus&act=clearWeed';

tmpGetStr:=

//收获

Action_harvest : begin

tmpGetStr:= '/?mod=farmlandstatus&act=harvest';

PostData:=

( Format('place=%d&ownerId=%d&farmTime=%d&farmKey

=%s',

[aPlace, aOwnerId, farmTime, farmKey]) );

end;

//松土

Action_scarify : begin

tmpGetStr:= '/?mod=farmlandstatus&act=scarify';

PostData:=

( Format('place=%d&ownerId=%d&farmTime=%d&farmKey

=%s',

[aPlace, aOwnerId, farmTime, farmKey]) );

end;

//种植

Action_planting : begin

tmpGetStr:= '/?mod=farmlandstatus&act=planting';

PostData:=

( Format('place=%d&cId=%d&ownerId=%d&farmTime=%d

&farmKey=%s',

[aPlace, aSeedID, aOwnerId, farmTime, farmKey]) );

end;

//卖出

Action_Sale: begin

tmpGetStr:= '/?mod=repertory&act=sale';

PostData:=

( Format('cId=%d&farmTime=%d&number=%d&farmKey=

%s',

[aSeedID, farmTime, aPlace, farmKey]) );

end;

//全部卖出

Action_SaleAll : begin

tmpGetStr:= '/?mod=repertory&act=saleAll';

PostData:= ( Format('farmTime=%d&farmKey=%s',

[farmTime, farmKey]) );

end;

//买东西

Action_Buy : begin

tmpGetStr:= '/?mod=repertory&act=buySeed';

PostData:=

( Format('number=%d&cId=%d&farmTime=%d&farmKey=

%s',

[aPlace, aSeedID, farmTime, farmKey]) );

end;

//查看消息

Action_getAllInfo : begin

tmpGetStr:= '/?mod=chat&act=getAllInfo';

PostData:=

( Format('uId==%d&farmTime=%d&farmKey=%s',

[aOwnerId, farmTime, farmKey]) );

end;

end;

:= tmpGetStr;

try

(''+ConnHost+tmpGetStr, PostData, RespData);

if seCode = 200 then

Result:= True;

aWebStr:= Utf8ToAnsi(ring);

except

end;

except

end;

;

end;

//取得farmKey

function GetfarmKey(aInputTimeInt: Int64; var aFarmTime: int64; var aFarmKey:

string): Boolean;

var

tmpaIdHTTP: TIdHTTP;

RespData: TStringStream;

tmpStr: string;

tmpTimePos, tmpKeyPos: integer;

begin

Result:= False;

afarmTime:= aInputTimeInt;

afarmKey:= LowerCase(Fmd5( IntToStr(afarmTime)

Copy('sdoit78sdopig7w34057', (afarmTime mod 10)+1, 20) ));

Result:= True;

end;

+

//写日志文件

procedure WriteLog(aQQnum, aLogStr, aAppPah: String);

var

F : TextFile;

tmpStr: string;

begin

tmpStr:= aAppPah + '日志';

if not DirectoryExists(tmpStr) then

if not CreateDir(tmpStr) then

begin

//sMessages;

end;

tmpStr:= tmpStr+ aQQnum + '';

if not DirectoryExists(tmpStr) then

if not CreateDir(tmpStr) then

begin

//sMessages;

end;

tmpStr:= tmpStr+FormatDateTime('YYYYMM', Date())+'';

if not DirectoryExists(tmpStr) then

if not CreateDir(tmpStr) then

begin

//sMessages;

end;

tmpStr:= tmpStr+FormatDateTime('YYYYMMDD', Date())+'.Log';

AssignFile(F, tmpStr);

if FileExists(tmpStr) then

Append(F)

else

ReWrite(F);

Writeln(F, aLogStr);

CloseFile(F);

end;

initialization

DelayedDpikeInt:= 0;

QQ_ServerTime:= DateTimeToServerTime(Now());

Loc_ServerTime:= QQ_ServerTime;

end.