Hi all.

I followed the excellent example source (HttpAsy1). It works well. I filled a 
CheckListBox with remote files to catch. If one file fails (StatusCode = 404) I 
change the file extension and do another request. The OnRequestDone is only 
assigned if the StatusCode is <> 404. That works well, but the resulting file 
has no content.

I want to download several zipped files. But if one zip file is not there, I 
try to download a text file (thats the unzipped file on the server).

I give the example code:

procedure TForm1.ExecSimultaneous;
begin
  for Item := 1 to CheckListBox1.Items.Count do begin
    AHttpCli := THttpCli.Create(Self);
    with AHttpCli do begin
      MultiThreaded := True;
      FHttpCliList.Add(AHttpCli);
      Tag := Item;
      URL := Trim(CheckListBox1.Items[Item-1]);
      RcvdStream := TMemoryStream.Create;
      AHttpCli.OnHeaderData := HttpCli1HeaderData;
      AHttpCli.GetAsync
    end
  end
end;

procedure TForm1.HttpCli1HeaderData(Sender: TObject);
begin
  with THttpCli(Sender) do begin
    if StatusCode = 404 then begin
      Abort;
      URL := ChangeFileExt(URL, '.txt');
      GetAsync;
      Exit
    end;
    OnRequestDone := HttpCliItemRequestDone
  end
end;

procedure TForm1.HttpCliItemRequestDone(
  Sender : TObject;
  RqType : THttpRequest;
  Error  : Word);
var
    Item     : Integer;
    AHttpCli : THttpCli;
    Count    : Integer;
    SL: TMemoryStream;
    s: String;
begin
  AHttpCli := Sender as THttpCli;

  { Remove the item form the list }
  Count := FHttpCliList.Count;
  for Item := 1 to Count do begin
    if AHttpCli = FHttpCliList.Items[Item - 1] then begin
      SL := TMemoryStream.Create;
      SL.LoadFromStream(AHttpCli.RcvdStream);
      SL.SaveToFile('c:\' + Copy(s, LastDelimiter('/', s) + 1, 999));
      SL.Free;
      AHttpCli.RcvdStream.Free;
      FHttpCliList.Delete(Item - 1);
      Break
    end
  end;

  { Free the item }
  AHttpCli.Free;
end;

Hope, that someone can help me or can show me a better way.

Thanks, Christian


-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to