Hallo,
ich muss derzeit mit meiner Software mit einer
API kommunizieren. Im Header der HTTP Antwort stehen dann Informationen, die ich benötige. Ich hatte diesen Teil bisher immer mit
Indy und dem SSL Socket gelöst, aber leider schlagen Virenprogramme (zB Antivir) grundsätzlich immer an, wenn ich diese Klassen verwende. Deshalb suche ich nach einer anderen Möglichkeit, die Daten auszulesen. Ich habe mitlerweile alle
API-Anfragen, welche den HTTP Header nicht auslesen müssen auf eine Funktion umgestellt, die mit WININET arbeitet. Leider liefert mir diese Funktion (habe ich nicht selbst geschrieben, nur im Internet gefunden) natürlich nicht den HTTP Header mit.
Deswegen lange Rede kurzer Sinn: Wie kann ich den HTTP Header auslesen ohne
Indy zu verwenden? Am besten mit WININET, weil das bisher immer super funktioniert hat!
Das ist die Funktion die ich derzeit benutze (diese liefert keinen Header mit)
Delphi-Quellcode:
function GetUrlContent(
const Url:
string): UTF8String;
var
NetHandle: HINTERNET;
UrlHandle: HINTERNET;
Buffer:
array[0..1023]
of byte;
BytesRead: dWord;
StrBuffer: UTF8String;
begin
Result := '
';
NetHandle := InternetOpen('
Delphi 2009', INTERNET_OPEN_TYPE_PRECONFIG,
nil,
nil, 0);
if Assigned(NetHandle)
then
try
UrlHandle := InternetOpenUrl(NetHandle, PChar(
Url),
nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle)
then
try
repeat
InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
SetString(StrBuffer, PAnsiChar(@Buffer[0]), BytesRead);
Result := Result + StrBuffer;
until BytesRead = 0;
finally
InternetCloseHandle(UrlHandle);
end
else
raise Exception.CreateFmt('
Cannot open URL %s', [
Url]);
finally
InternetCloseHandle(NetHandle);
end
else
raise Exception.Create('
Unable to initialize Wininet');
end;
Vielen Dank für eure Mühe!