www.pudn.com > POLL_SRC.rar > HTTPtask.pas


unit HTTPtask; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, StdCtrls, 
  IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL, IdBaseComponent, IdComponent, 
  IdTCPConnection, IdTCPClient, IdHTTP, IdAntiFreezeBase, IdAntiFreeze, 
  AdvOcr; 
 
type 
  THTTPtask = class(TThread) 
  private 
  protected 
    _HTTP : TIdHTTP; 
    _SSL : TIdSSLIOHandlerSocket; 
    _PAUSE_FLAG : boolean; 
    procedure Execute; override; 
    procedure InitHTTP; 
    procedure DoneHTTP; virtual; 
    procedure RecrHTTP; 
    procedure Relay(sec : Byte); 
    procedure DebugHtml; 
    function Login : boolean; virtual; 
    procedure Process; virtual; 
  public 
    _USE_PROXY : boolean; 
    _PROXY_ADDR : string; 
    _PROXY_PORT : Integer; 
    _NEED_AUTH : boolean; 
    _PROXY_USER : string; 
    _PROXY_PASS : string; 
    // 
    _LOGIN_NAME : string; 
    _LOGIN_PASS : string; 
    _HTML : string; 
    procedure Pause; 
    procedure Goon; 
    procedure Stop; 
    constructor Create; 
    destructor Destroy; override; 
  end; 
 
  THTTPtaskTrace = class(THTTPtask) 
  private 
    _LOG : string; 
  protected 
    procedure ShowLog(desc : string); 
    procedure TraceLog; 
  public 
    _LOG_LST : TListBox; 
  end; 
 
implementation 
 
uses 
  HTTPutil; 
 
{THTTPtask} 
 
constructor THTTPtask.Create; 
begin 
  inherited Create(TRUE); 
  FreeOnTerminate := TRUE; 
  _HTTP := TIdHTTP.Create(nil); 
  _SSL := TIdSSLIOHandlerSocket.Create(nil); 
  _USE_PROXY := False; 
end; 
 
destructor THTTPtask.Destroy; 
begin 
  _SSL.Free; 
  _HTTP.Free; 
  inherited Destroy; 
end; 
 
procedure THTTPtask.Execute; 
begin 
  InitHTTP; 
  if Login then Process; 
  DoneHTTP; 
end; 
 
procedure THTTPtask.Pause; 
begin 
  _PAUSE_FLAG := TRUE; 
end; 
 
procedure THTTPtask.Goon; 
begin 
  _PAUSE_FLAG := FALSE; 
  Self.Resume; 
end; 
 
procedure THTTPtask.Stop; 
begin 
  DoneHTTP; 
  _SSL.Free; 
  _HTTP.Free; 
  TerminateThread(Self.Handle,0); 
end; 
 
procedure THTTPtask.Relay(sec : Byte); 
var 
  i : Integer; 
begin 
  for i:=1 to 10*sec do 
  begin 
    if _PAUSE_FLAG then break; 
    Sleep(100); 
  end; 
end; 
 
procedure THTTPtask.InitHTTP; 
begin 
  _HTTP.ProtocolVersion := pv1_1; 
  _HTTP.ReadTimeout := 5000; 
  _HTTP.HandleRedirects := True; 
  _HTTP.AllowCookies := True; 
   _HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'; 
  _SSL.SSLOptions.Method := sslvSSLv3; 
  if _USE_PROXY then 
  begin 
    _HTTP.ProxyParams.ProxyServer := _PROXY_ADDR; 
    _HTTP.ProxyParams.ProxyPort := _PROXY_PORT; 
    if _NEED_AUTH then 
    begin 
      _HTTP.ProxyParams.ProxyUsername := _PROXY_USER; 
      _HTTP.ProxyParams.ProxyPassword := _PROXY_PASS; 
    end; 
  end; 
end; 
 
procedure THTTPtask.DoneHTTP; 
begin 
 
end; 
 
procedure THTTPtask.RecrHTTP; 
begin 
  _HTTP.Free; 
  _HTTP := TIdHTTP.Create(nil); 
  InitHTTP; 
end; 
 
procedure THTTPtask.DebugHtml; 
var 
  htmlsl : TStringList; 
begin 
  htmlsl := TStringList.Create; 
  htmlsl.Add(_HTML); 
  htmlsl.SaveToFile(ExtractFilePath(ParamStr(0))+'debug.htm'); 
  htmlsl.Free; 
end; 
 
function THTTPtask.Login : boolean; 
begin 
  Result := True; 
end; 
 
procedure THTTPtask.Process; 
begin 
 
end; 
 
{THTTPtaskTrace} 
procedure THTTPtaskTrace.ShowLog(desc : string); 
begin 
  _LOG := desc; 
  Synchronize(TraceLog); 
end; 
 
procedure THTTPtaskTrace.TraceLog; 
var 
  LogToAdd : string; 
begin 
  if _LOG_LST <> nil then 
  begin 
    LogToAdd := DateTimeToStr(now)+' : '+_LOG; 
    AddLstBPro(_LOG_LST,LogToAdd,True,LSTB_MAX_LINE); 
  end; 
end; 
 
end.