![]() |
Datei runterladen und dabei IE-Cockies verwenden
tachchen ^^
also, ich würde gern eine Datei runterladen und beim Anfordern der Datei die zur URL gültigen Cockies mitsenden, welcher im Internet Explorer gespeichert sind. Grund ist, daß zum Runterladen das Session-Cockie benötigt wird und ich das Login zur Webseite nicht mit in das Programm integrieren möchte, sondern daß das Einloggen immernoch im "normalen" Browser bleibt. Ideal wäre es auch, wenn ein eventuell geändertes Cockie (von der Webseite geändert) entsprechend im IE abgespeichert wird. (dieses ist aber nicht unbedingt nötig, da für diesen Fall eine andere Lösung bestünde) gibt es da eine Möglichkeit für D7(incl INDY) + JEDI? [add] ach ja, derzeit lade ich die Datei über TWebbrowser runter, da diese eh im Programm verwendet wird, aber erstens ist dieser Weg nicht grad schnell/optimal und dann sieht man den Dateiinhalt (.txt) kurz im TWebbrowser. |
Re: Datei runterladen und dabei IE-Cockies verwenden
Mir würde nur einfallen das Das Cookie per Proxy mitschneiden.
mfg, Björn |
Re: Datei runterladen und dabei IE-Cockies verwenden
na ja, es muß ja irgendwie möglichsein die Cockies direkt vom IE zu erfragen ... die temprären Dateien kann man ja auch erfragen und ändern.
und es muß nicht unbedingt sein, daß die Seite grade im IE geladen wird/wurde. unter umständen kann es auch sein, daß für die Seite ein autologin eingerichtet wurde, was aber nicht immer de Fall ist. da TWebbrowser ja den IE kapselt und somit automatisch dessen Cockies verwendet, läuft dieses erstmal von der gewünschten Funktion her nicht schlecht, aber eben nicht optimal.
Delphi-Quellcode:
mir wäre es da lieber, wenn es schneller ginge und nicht die Datei erst angezeigt werden müßte.
Function TForm1.DownloadFile(Const URL: String): String;
Var D: TDateTime; Label NeuStart; Begin Try NeuStart: //WebBrowser1.Stop; D := Now; WebBrowser1.Tag := 0; WebBrowser1.Navigate(URL); While WebBrowser1.Tag = 0 do Begin If Application.Terminated Then Begin Result := ''; Exit; End; If Now - D > 1/24/60/60*30 Then Begin WebBrowser1.Navigate(''); Application.ProcessMessages; Sleep(100); Goto NeuStart; End; Application.ProcessMessages; Sleep(25); End; Result := (WebBrowser1.Document as IHTMLDocument2).body.outerHTML; //WebBrowser1.Navigate(''); Except Result := ''; Application.MessageBox(PChar(Exception(ExceptObject).Message), PChar(Caption + ' - Programmfehler'), MB_OK); Application.Terminate; End; End; Procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; Const pDisp: IDispatch; Var URL: OleVariant); Begin If TWebBrowser(Sender).Tag = 0 Then TWebBrowser(Sender).Tag := 1; End; es sieht blöd aus, wenn die Anzeige 'ne weile verschwindet, dafür dann die runterzuladene Datei angezeigt wird und dann muß die alte Anzeige wieder neu zusammengestellt werden. außerdem ist es möglich, wärend die Datei geladen wird (da die auch nicht immer klein ist und das Internet hier am testrechner nicht grade schnell), daß man als User da in den Download eingreifen kann ... mit IE-Popup und auch über die Tastatur kann TWebbrowser ja auch gesteuert werden. ESC=Download abbrechen Backspace=Seite zurück (vorherige Seite laden) usw. |
Re: Datei runterladen und dabei IE-Cockies verwenden
Und wenn du direkt den IE verwendest?
|
Re: Datei runterladen und dabei IE-Cockies verwenden
klar ginge das, aber ich brauch den Dateiinhalt ja im Programm. :wink:
|
Re: Datei runterladen und dabei IE-Cockies verwenden
Ja ich meinte den IE als Downloadkomponente (TWebBrowser oder ferngesteuert)
|
Re: Datei runterladen und dabei IE-Cockies verwenden
den TWebbrowser nehm ich ja schon, allerdings ist dieses nicht grad ein optimaler Weg.
besser wäre sowas:
hab jetzt auch schon 2 weiter Varianten zum Runterladen einer Datei und bei Ersterem mit INDY soll man so angeblich ein Cockie mitsenden können, aber da fehlt mir dann noch das nötige Cockie. Beim Zweitem weiß ich nichtmal wie man dort das Cockie überhaupt einbaut, allerdings wäre es mir so dann schon lieber, da so keine Zusatzkomonenten nötig wären.
Delphi-Quellcode:
Function TForm1.DownloadFile(Const URL: String): String;
Begin IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; .NET CLR 1.0.3705)'; IdHTTP1.Request.CustomHeaders.Add('Cookie:' + Cookie); Result := IdHTTP1.Get(URL); End; Function TForm1.DownloadFile(Const URL: String): String; Const BufferSize = 2048; Var hSession, hURL: HInternet; Buffer: String; BufferLength: LongWord; begin Result := ''; hSession := InternetOpen('User', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0); Repeat SetLength(Buffer, BufferSize); InternetReadFile(hURL, @Buffer[1], BufferSize, BufferLength); Result := Result + Copy(Buffer, 1, BufferLength); Until BufferLength = 0; InternetCloseHandle(hURL); InternetCloseHandle(hSession); End; |
Re: Datei runterladen und dabei IE-Cockies verwenden
MMh. Ich weiß nicht ob es klappt aber schau dir mal die Funktion InternetGetCookie() an. Zudem kann es sein, dass bei InternetOpenURL automatisch die IE Cookies mitgesendet werden, da diese Funktionen bestandteil des IE sind.
|
Re: Datei runterladen und dabei IE-Cockies verwenden
mit InternetOpenURL funktionierte es nicht, weßhalb ich mal davon ausgeh, daß sie da nicht standardmäßig mitgeschickt werden.
InternetGetCookie schau ich mir aber mal an. |
Re: Datei runterladen und dabei IE-Cockies verwenden
so, ich hatte nochmal alles durchprobiert.
TWebbrowser verwendet natürlich die IE-Cockies, aber mir ist aufgefallen, daß der bei HTML-Code die Tags verändert o.O (vorallem Groß-/Kleinschreibung und ", sowie ' mal hinzugefügt, oder entfernt wird) InternetOpenURL und Co. verwendet ebenfalls die Cockies, keine Ahnung warum es bei den letzten Test dennoch nicht ging. URLDownloadToFile: hab ich jetzt nicht nochmal getestet, da ich ja nicht erstr über 'ne Datei gehn wollte. und die INDYs kann man mit den Cockies versehn, allerdings muß man da erstmal alle nötigen Cockies zur URL auslesen und per IdHTTP1.Request.CustomHeaders.Add an die Komponente übergeben, aber möglich ist es ^^ also Kurz und Knapp ... plötzlich geht es, auch wenn ich nicht weiß warum. (hatte aber mal die IE-Caches geleert) und ich verwende jetzt InternetOpenURL :angel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz