URL wininet ermitteln
Hallo,
ich lade mir mit wininet-Funktionen etwas aus dem Internet herunter... Ich verwende diese Funktion. Nun könnte man denken, ich kann mir einfach die URL, die ich ja auch als Parameter angebe, nehmen. Dem ist aber nicht so, da ich weitergeleitet werde - ich brauche dann die andere URL. Also
Code:
ich werde auf die Seite "http://xyz.de/seite2.html" weitergeleitet und bekomme mit DownloadFile auch korrekterweise den Inhalt der neuen Seite, was ich gut finde.
DownloadFile('http://xyz.de/abc.html')
Allerdings "weiß" ich ja nicht, dass ich jetzt eigentlich auf "http://xyz.de/seite2.html" bin. Trotzdem erhalte ich dessen Inhalt. Wie kriege ich sowas wie im Beispiel http://xyz.de/seite2.html" genannt heraus ? Vielen Dank, Pascal |
AW: URL wininet ermitteln
Die folgenden Einträge in der MSDN könnten dir weiterhelfen:
InternetOpenUrl: Du musst wahrschleinlich das Flag INTERNET_FLAG_NO_AUTO_REDIRECT setzen, damit du das Ziel des Redirects ermitteln kannst. HttpQueryInfo: Hiermit kannst du die Headerdaten, welche der Server geschickt hat, betrachten. Query Info Flags: Diese Flags musst du in der oben genannten HttpQueryInfo angeben. Besonders HTTP_QUERY_LOCATION und HTTP_QUERY_STATUS_CODE sind interessant. Deine prinzipielle Vorgehensweise sollte diese sein:
Das sollte funktionieren. Bedenke bitte, dass ich das nicht getestet, sondern nur an Hand der verlinkten Dokumentation hergeleitet habe. Gruß, Sven |
AW: URL wininet ermitteln
Hallo,
vielen Dank für deine Antwort! Ich halte die Idee für sehr gut. Momentan erhalte ich mit ausgeschalteter Redirection einen 302. Laut Wiki ist das eine typische Weiterleitung, also komme ich der Sache näher... Ich werde mich nochmal melden. Pascal |
AW: URL wininet ermitteln
Ich habe es geschafft !
:-D Ohne Deine Hilfe hätte ich das nicht geschafft ! Als Dank dafür veröffentliche ich den Code, um die Weiterleitungs-URL herauszufinden:
Delphi-Quellcode:
Hoffentlich kann jemand das gebrauchen !
function GetRedirection(const Url: string): string;
var hInet: HINTERNET; hConnect: HINTERNET; infoBuffer: array [0..512] of char; dummy: DWORD; bufLen: DWORD; okay: longbool; reply: string; begin Result := '?'; hInet := InternetOpen(PChar('a browser...'), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); hConnect := InternetOpenUrl(hInet, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD + INTERNET_FLAG_NO_AUTO_REDIRECT, 0); if not Assigned(hConnect) then Exit else begin dummy := 0; bufLen := Length(infoBuffer); okay := HttpQueryInfo(hConnect, HTTP_QUERY_STATUS_CODE, @infoBuffer[0], bufLen, dummy); if not okay then Exit else begin reply := infoBuffer; if (reply = '301') or (reply = '302') then begin dummy := 0; bufLen := Length(infoBuffer); okay := HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, @infoBuffer[0], bufLen, dummy); if not okay then Exit else begin reply := infoBuffer; if reply <> '' then Result := reply; end; end else Exit; end; InternetCloseHandle(hConnect); end; InternetCloseHandle(hInet); end; Nochmals vielen Dank, liebe Grüße, Pascal |
AW: URL wininet ermitteln
Zitat:
Eine Frage habe ich jedoch:
Delphi-Quellcode:
Ist
var
hConnect: HINTERNET; begin ... if not Assigned(hConnect) then Exit else ... end;
Delphi-Quellcode:
als Zeiger definiert? Ansonsten ist
HINTERNET
Delphi-Quellcode:
falsch und du solltest stattdessen auf 0 überprüfen.
Assigned
Gruß, Sven |
AW: URL wininet ermitteln
Ja,
in der wininet.pp:
Delphi-Quellcode:
und in der base.inc:
type
HINTERNET = LPVOID;
Delphi-Quellcode:
Hoffe, dass das passt ;)
type
... LPVOID = pointer; Pascal |
AW: URL wininet ermitteln
Zitat:
Gruß, Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz