Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Inhalt einer HTTP-Datei direkt in String laden

  Alt 12. Mai 2007, 21:47
Hi,
ja, auf die WinINet-Komponenten bin ich auch gerade gestoßen. Meine Lösung sieht so aus:
Delphi-Quellcode:
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;
Das funktioniert auch wunderbar - zumindest für das was es soll.

Danke trotzdem für deine Unit,
Chris
  Mit Zitat antworten Zitat