A musisz mieć ten plik koniecznie na dysku? Ja polecam zapisać go do pamięci poniżdza funkcją, co
korzysta z modułu WinInet. Następnie taki plik można wczytać do na przykład StringListy i używając
odpowiedniego kodu odpowiednio sparsować uzyskując kursy czy jakieś tam inne żądane informacje.
procedure DownloadToStream(const URL: string; const Strumien: TStream);
var
Buffer : array[1..1024] of Byte;
hSession, hURL : HINTERNET;
dwRead : DWORD;
pBuf : Pointer;
dwBufLen : DWORD;
dwIndex : DWORD;
begin
hSession := InternetOpen('Wstaw tutaj żądany UserAgent',
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
Application.ProcessMessages;
try
hURL := InternetOpenURL(hSession, PChar(URL), nil, 0,
INTERNET_FLAG_RELOAD, 0);
Application.ProcessMessages;
dwBufLen := 1024;
dwIndex := 0;
GetMem(pBuf, dwBufLen);
HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
pBuf, dwBufLen, dwIndex);
FreeMem(pBuf, dwBufLen);
try
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
Strumien.WriteBuffer(Buffer, dwRead);
Application.ProcessMessages;
until dwRead = 0;
finally
InternetCloseHandle(hSession);
end;
finally
InternetCloseHandle(hURL);
end;
end;
Przykład użycia (ważne jest właśnie aby przed pobraniem i po nim ustawić pozycję Streama na zero):
var
MemStream : TMemoryStream;
OutputSL : TStringList;
begin
// ...
MemStream := TMemoryStream.Create;
MemStream.Position := 0;
DownloadToStream('http://adres.strony.net', MemStream);
MemStream.Position := 0;
OutputSL := TStringList.Create;
OutputSL.LoadFromStream(MemStream);
MemStream.Free;
// ...