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 (sPosB
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">点击
成跳转。
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.
发表评论