var
hSession, hXmlFile: hInternet;
pCode:
array[1..10]
of WideChar;
dwCodeLen, dwIndex, dwNumToRead, dwRead: Cardinal;
buf:
array[0..MAX_CACHE_ENTRY_INFO_SIZE]
of WideChar;
begin
Result := '
';
// Internet-Session öffnen
hSession := InternetOpen('
XmlDownloader/1.0', INTERNET_OPEN_TYPE_PRECONFIG,
nil,
nil, 0);
// Fehlgeschlagen
if (hSession =
nil)
then
begin
raise Exception.Create('
Konnte keine Verbindung zum Internet herstellen.');
Exit;
end;
// URL öffnen
hXmlFile := InternetOpenUrl(hSession, PChar(DataURL),
nil, 0,
INTERNET_FLAG_RELOAD
or INTERNET_FLAG_NO_CACHE_WRITE
or INTERNET_FLAG_NO_COOKIES, 0);
if (hXmlFile =
nil)
then
begin
raise Exception.Create('
Verbindung zur XML-Datei fehlgeschlagen.');
Exit;
end;
// Verfügbarkeit überprüfen
dwIndex := 0;
dwCodeLen := 10;
HttpQueryInfo(hXmlFile, HTTP_QUERY_STATUS_CODE, @pCode, dwCodeLen, dwIndex);
if not ((PChar(@pCode) = '
200')
or (PChar(@pCode) = '
302'))
then
begin
raise Exception.Create('
Die Datei konnte nicht geladen werden. Fehler: '
+ PChar(@pCode));
Exit;
end;
dwNumToRead := SizeOf(buf)-1;
// Datei zusammensetzen
while (InternetReadFile(hXmlFile, @buf, dwNumToRead, dwRead))
do
begin
if dwRead = 0
then
break;
// Null-terminieren
buf[dwRead] := #0;
Result := Result + WideString(@buf);
end;
// Handle wieder schließen
InternetCloseHandle(hXmlFile);
InternetCloseHandle(hSession);
end;