Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datei runterladen und dabei IE-Cockies verwenden (https://www.delphipraxis.net/96091-datei-runterladen-und-dabei-ie-cockies-verwenden.html)

himitsu 18. Jul 2007 14:23


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.

arbu man 18. Jul 2007 14:24

Re: Datei runterladen und dabei IE-Cockies verwenden
 
Mir würde nur einfallen das Das Cookie per Proxy mitschneiden.

mfg, Björn

himitsu 18. Jul 2007 14:46

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:
  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;
mir wäre es da lieber, wenn es schneller ginge und nicht die Datei erst angezeigt werden müßte.
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.

mkinzler 18. Jul 2007 15:50

Re: Datei runterladen und dabei IE-Cockies verwenden
 
Und wenn du direkt den IE verwendest?

himitsu 18. Jul 2007 16:04

Re: Datei runterladen und dabei IE-Cockies verwenden
 
klar ginge das, aber ich brauch den Dateiinhalt ja im Programm. :wink:

mkinzler 18. Jul 2007 16:08

Re: Datei runterladen und dabei IE-Cockies verwenden
 
Ja ich meinte den IE als Downloadkomponente (TWebBrowser oder ferngesteuert)

himitsu 18. Jul 2007 16:59

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:
  • Cockie aus dem IE auslesen
  • datei runterladen und im String speichern
    z.B. mit INDY/JEDI ... irgendwie soll man da ja die Cockies angeben können
  • eventuell empfanges Cockie wieder im IE speichern


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;

jim_raynor 18. Jul 2007 17:18

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.

himitsu 18. Jul 2007 17:24

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.

himitsu 19. Jul 2007 14:10

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 18:16 Uhr.
Seite 1 von 2  1 2      

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