Einzelnen Beitrag anzeigen

endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

Probleme mit Indy (IdHTTP)

  Alt 23. Jun 2005, 20:27
Hallo,

ich habe die Indy Komponenten in meinen Threads global deklariert und
rufe in der Exceute Methode eine Funktion auf die die Indys
initialisiert und nach dem Durchlauf wieder frei gibt.
Wärend die Methode Lunch() durchläuft werden verschiedene Get und Post Request
getätigt, leider kommt es hier immer wieder dazu das die Threads einfrieren
bzw eine lange Zeit überhaupt nichts machen.
Genau das kann ich mir allerdings nicht erklären, der Timeout für einen
Verbindungsaufbau liegt bei 10s und sollte der String aus den Methoden
Get() und Post() nicht die gesuchten Wörter enthalten müßte der nächste
Request aus der Methode Lunch() abgearbeitet werden.

Ich bin ein wenig ratlos, weiß vielleicht Jemand woran das liegt?

PS: SmartPos ist lediglich eine schnellere Variante der Pos() Methode


Delphi-Quellcode:
function TMyThreads.Lunch: Boolean;
...
begin
  Result:= False;
//init components
  IdHTTP:= TIdHTTP.Create(nil);
  IdCookieManager:= TIdCookieManager.Create(nil);
  PostDataStream := TStringStream.Create('');
  ParamData := TStringStream.Create('');
//settings
  IdHTTP.AllowCookies:= True;
  IdHTTP.CookieManager:= IdCookieManager;
  IdHTTP.HandleRedirects:= True;
  IdHTTP.Request.ContentType:= 'application/x-www-form-urlencoded';
  IdHTTP.Request.Connection:= 'Keep-Alive';
  IdHTTP.ConnectTimeout:= 10000;
  IdHTTP.Request.UserAgent:= '..';

  Source:= '';
  Source:= Get('...');
  if SmartPos('...', Source, False, 1, True) > 0 then
  begin
    Source:= '';
    Source:= Get('...');
    if SmartPos('...', Source, False, 1, True) > 0 then
    begin
      ...
    end;
  end;
  
  Source:= '';
  Source:= Get('...');
  if SmartPos('...', Source, False, 1, True) > 0 then
  begin
    Source:= '';
    Source:= Get('...');
    if SmartPos('...', Source, False, 1, True) > 0 then
    begin
      ...
    end;
  end;

  Source:= '';
  Source:= Get('...');
  if SmartPos('...', Source, False, 1, True) > 0 then
  begin
    Source:= '';
    Source:= Get('...');
    if SmartPos('...', Source, False, 1, True) > 0 then
    begin
      ...
    end;
  end;

 ...// usw


  FreeAndNil(ParamData);
  FreeAndNil(PostDataStream);
  FreeAndNil(IdCookieManager);
  FreeAndNil(IdHTTP);
  Result:= True;
end;

function TMyThreads.Get(Url: String): String;
begin
  try
    Result:= IdHTTP.Get(Url);
  except
    FStatus:= 'error';
    Synchronize(UpdateLVCaption);
    Result:= '';
  end;
end;

function TMyThreads.Post(Url, Params: String): String;
begin
  ParamData.WriteString(Params);
  try
    IdHTTP.Post(Url, ParamData, PostDataStream);
    Result:= PostDataStream.DataString;
  except
    FStatus:= 'error';
    Synchronize(UpdateLVCaption);
    Result:= '';
  end;
  ParamData.Size:= 0;
  PostDataStream.Size:= 0;
end;
  Mit Zitat antworten Zitat