Código:
function DownloadToStream(Url: string; Stream: TStream): Boolean;
var
hNet: HINTERNET;
hUrl: HINTERNET;
Buffer: PChar;
BytesRead: DWORD;
i: Integer;
begin
Result := FALSE;
hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if (hNet <> nil) then
begin
hUrl := InternetOpenUrl(hNet, PChar(Url), nil, 0,
INTERNET_FLAG_RELOAD, 0);
if (hUrl <> nil) then
begin
GetMem(Buffer,100*1024);
try
while (InternetReadFile(hUrl, Buffer, 100*1024, BytesRead)) do
begin
if (BytesRead = 0) then
begin
Result := TRUE;
break;
end;
// Aqui sustituimos el caracter nulo por un espacio
for i:= 0 to BytesRead - 1 do
if Buffer[i] = #0 then
Buffer[i]:= #32;
Stream.WriteBuffer(Buffer^,BytesRead);
end;
finally
FreeMem(Buffer);
end;
InternetCloseHandle(hUrl);
end;
InternetCloseHandle(hNet);
end;
end;
try
DownloadToStream(url,Stream);
Memo1.Lines.Text:= Stream.DataString;
finally
Stream.Free;
end;
Quiero que si la web no responde, en 30 segundos se detenga y se quede a la espera durante 30 minutos hasta que vuelva a intentarlo de nuevo.
Gracias