IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

Transfert d'un objet du Cache Internet Explorer


Sujet :

Web & réseau Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Transfert d'un objet du Cache Internet Explorer
    Bonjour

    (En rapport avec : http://www.developpez.net/forums/d11...rnet-explorer/ )

    Je cherche suivant ce code précis (3) :
    http://www.swissdelphicenter.ch/torr...ode.php?id=412

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    {3. Forces a download of the requested file, object, or directory listing from the origin server,
        not from the cache
    }
     
    function DownloadURL_NOCache(const aUrl: string; var s: String): Boolean;
    var
      hSession: HINTERNET;
      hService: HINTERNET;
      lpBuffer: array[0..1024 + 1] of Char;
      dwBytesRead: DWORD;
    begin
      Result := False;
      s := '';
      // hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
      hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      try
        if Assigned(hSession) then
        begin
          hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);
          if Assigned(hService) then
            try
              while True do
              begin
                dwBytesRead := 1024;
                InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
                if dwBytesRead = 0 then break;
                lpBuffer[dwBytesRead] := #0;
                s := s + lpBuffer;
              end;
              Result := True;
            finally
              InternetCloseHandle(hService);
            end;
        end;
      finally
        InternetCloseHandle(hSession);
      end;
    end;
     
    //aufrufen
    var
      s: String;
    begin
     if DownloadURL('http://www.swissdelphicenter.ch/', s) then
       ShowMessage(s);
    end;
    Comment "sortir" l'objet downloadé, afin de l'envoyer par exemple vers le dossier Temp de l'user de session afin de pouvoir le gérer.

    Car le code ci-dessus est impec ; ça rafraîchi effectivement l'objet pointé en cache (pas une mince affaire !).

    Mais comment le récupérer ?

    J'ai bien noté le premier paramètre de InternetOpen(), mais...

    Car tout le contenu de ce Temporary Internet File est considéré comme invisible par toutes les méthodes de copie que j'ai tenté.
    (Sauf des fichiers .txt via une StringList, mais pour tout autre objet = niet)

    Merci de votre expérience

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 338
    Points
    13 338
    Par défaut
    Je passerais par l'ajout d'un paramètre aléatoire dans l'url et utiliserais simplement la fonction URLDownloadToFile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      URL :string;
    begin
      URL := 'http:\\mydomain.com?rand=' +IntToStr(Random(MaxInt));
      URLDownloadToFile(nil, PChar(URL), 'MonFichier.txt', 0, nil);
    end;

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Je dois dire que je ne pige pas du tout ta méthode
    Ça ajoute 3 ou 4 pages en cache IE et rien d'autre.

    Mais tu dois avoir une idée derrière la tête

    @+

    Edit : oupssss je m'en doutais...

    Arfff, si si un fichier arrive en dossier de l'appli, mais limité à 10,5 Ko, alors qu'il s'agit d'un exe de plusieurs Mo. J'avais pas vu.

    Mais chapeau pour cette idée

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 338
    Points
    13 338
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    Je dois dire que je ne pige pas du tout ta méthode
    Ça ajoute 3 ou 4 pages en cache IE et rien d'autre.
    Ben ton fichier est systématiquement téléchargé et sauvé où tu le souhaites. C'est ce que tu veux non ?

  5. #5
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ben ton fichier est systématiquement téléchargé et sauvé où tu le souhaites. C'est ce que tu veux non ?
    Oui mais... il en manque des morceaux

    Je suppose que ça fonctionne pour un fichier texte, mais un exe de plusieurs Mo, il manque des plumes.

    En plus faut pas qu'il arrive directo en dossier parent, car il sera virtualisé (UAC).

    Faudra qu'il arrive en dossier Temp de l'user de la session en cours.

    Pour cette raison que j'avais creusé et étais content d'avoir enfin trouvé comment rafraîchir le cache IE.

    Mais comment récupérer ce fichu fichier exe en cache IE ?

    Car tous les autres codes qui permettent de cibler le bon dossier (de son choix), hé bien ces codes ne permettent pas de choisir cela et ça reste en cache IE.

    Alors si un autre fichier est downloadé, hé bien si le cache n'est pas "remué", le résultat sera que le fichier existant sera resservi

    L'autre fois ainsi, j'ai au moins passé 2 heures en testant sous toutes les coutures, car je pensais que mon serveur me jouait des tours de cochons

    Mais non... en remuant le web, j'ai constaté que je n'étais pas le seul à avoir observé cela.

    L'autre fois par hasard, après avoir passé un coup de CCleaner, ça s'était bien passé ; tiens donc, ça m'a mis sur la piste du pot aux roses (clean cache IE).

    Le cache IE... ce dossier étrange "pingable" mais aucunement son contenu...

    Si seulement un if FileExists(...) détectait un fichier précis dedans, mais non et c'est justement là que commence la galère.

    Je parle de la constatation effectuée depuis ma configuration windows Vista. Je suppose que je ne suis pas le seul.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 338
    Points
    13 338
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    Je suppose que ça fonctionne pour un fichier texte, mais un exe de plusieurs Mo, il manque des plumes.
    J'ai fait l'essai avec un fichier de 14Mb sans soucis.

    Citation Envoyé par Droïde Système7 Voir le message
    En plus faut pas qu'il arrive directo en dossier parent, car il sera virtualisé (UAC).
    Avec un manifest correctement rempli (incluant requestedExecutionLevel), il n'y a pas de virtualisation

    Citation Envoyé par Droïde Système7 Voir le message
    Car tous les autres codes qui permettent de cibler le bon dossier (de son choix), hé bien ces codes ne permettent pas de choisir cela et ça reste en cache IE.
    ...
    Alors si un autre fichier est downloadé, hé bien si le cache n'est pas "remué", le résultat sera que le fichier existant sera resservi.
    Pas avec le paramètre Random. Puisque l'url a changé, le fichier est retéléchargé

  7. #7
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Pas avec le paramètre Random. Puisque l'url a changé, le fichier est retéléchargé
    Tiens, tu me donnes une idée...

    Je regarde ça de près

    Edit : tu as raison niveau Mo de téléchargement, mais faut pas se gourer de sens de... :
    URL := 'http:\\mydomain.com?rand=' +IntToStr(Random(MaxInt));

  8. #8
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bon alors les nouvelles :

    J'ai testé ce principe d'ajout de données en bout de l'URL.
    (Même que ça fonctionne impec sous une autre méthode plus complexe avec pointage du fichier downloadé en un dossier choisi)

    Dans le principe c'est OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL := 'http://monsite.com/download/myprogr.exe?rand=' +IntToStr(Random(MaxInt));
    Oui mais toujours des complications qui arrivent, puisque le fichier pointé doit passer par un script PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL := 'http://monsite.com/download.php?fichier=myprogr.exe?rand=' +IntToStr(Random(MaxInt));
    Et là en ce dernier cas, ça foire... enfin le refresh en cache échoue

    Edit : ce "refresh" échoue car j''ai vu qu'en cache IE, la fin du nom de l'exe est ...exe?rand=0

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    On va continuer la discussion ici plutôt qu'en MP...

    Mon idée était un peu différente, il ne s'agissait pas de faire croire à IE que le fichier téléchargé était différent en fournissant une adresse "paramétrée" variante, mais d'enregistrer ton exe sous un nom différent à chaque fois; peut-être qu'en combinant les 2...

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 338
    Points
    13 338
    Par défaut
    Il faut déjà respecter la syntaxe d'adressage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL := 'http://monsite.com/download.php?fichier=myprogr.exe&rand=' +IntToStr(Random(MaxInt));
    Sans oublier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    initialization
      Randomize;

  11. #11
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    Utilise un FileStream.
    Il faut threader aussi

    mon updater utilise cette méthode, en mettant ou non le flags reload sa permet de faire un "stop/reprendre". si tu veux les sources sont la "ThreadDown.pas" :
    http://code.google.com/p/toutenvrac/...club%2Fupdater
    Fichiers attachés Fichiers attachés

  12. #12
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    Alex, intéressant ton source, mais une chose m'interroge en unité ThreadDown.pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      If FileExists(PConf.NewApp) Then
          DeleteFile(PConf.NewApp);
    Car si ça pointe vers Internet Temporary Files, cette requête se cassera le nez.

    A moins que ce soit autre chose, j'ai regardé ça en travers.

    Mais à l'aide de tous les renseignements de vous tous, je crois que je vais pouvoir me débrouiller à avancer.

    Merci à vous

  13. #13
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    newapp c'est le chemin et nom de destination, en l'occurrence dans le temp de l'utilisateur avec le nom de l'aplication suivi de _tmp.exe

    regarde l'exemple en pièce jointe j'ai réduit le code.

  14. #14
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Alex, bon écoute... à l'aide de ton exemple que j'ai mis à rude épreuve comme suit :

    1. J'ai placé sur mon serveur trois fichiers exe d'appli totalement différentes.
    2. J'ai renommé tous ces noms par exemple en : toto1.exe - toto2.exe -toto3.exe
    3. J'ai lancé ton exemple avec une url pointant sur l'exe "toto.exe" concerné
    4. J'ai renommé sur serveur le toto1.exe en toto.exe
    5. J'ai lancé le download = OK bonne correspondance d'exe
    6. En laissant ton exemple actif
    7. J'ai renommé sur serveur ce "toto.exe" en "totoxxx.exe"
    8. J'ai renommé le "toto.2.exe" en "toto.exe"
    9. J'ai relancé de download = OK bonne correspondance
    10. idem avec renommage à tour de rôle de mes 3 exe différents sur serveur et...



    Je n'ai pas réussi à prendre par défaut ton code.

    Là je vais approfondir ça de près et m'en inspirer très très largement, sur la base de cet exemple.

    Mais sans compliquer en threadant cette méthode ; enfin je ne crois pas car je souhaite garder cette fiabilité.

    Grand merci à toi aussi, là cette fois je peux taguer en résolu

    @+

  15. #15
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    Pour plus de fiabilité je compare le fichier reçu avec son empreinte MD5.
    MD5 que je récupère d'une page avec d'autres infos comme la taille total du fichier pour afficher le temps restant et une ProgressBar.
    Si sa peut t'aider

  16. #16
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par ouiouioui Voir le message
    Pour plus de fiabilité je compare le fichier reçu avec son empreinte MD5.
    MD5 que je récupère d'une page avec d'autres infos comme la taille total du fichier pour afficher le temps restant et une ProgressBar.
    Si sa peut t'aider
    C'est du super luxe, je suis déjà comblé par ce que je viens de trouver


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer fichier dans cache Internet Explorer
    Par Droïde Système7 dans le forum Débuter
    Réponses: 7
    Dernier message: 30/03/2013, 09h12
  2. QTP et cache Internet Explorer
    Par MalcolmIT dans le forum Test
    Réponses: 0
    Dernier message: 29/08/2011, 15h44
  3. Passage obligé par le cache Internet Explorer ?
    Par Droïde Système7 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 19/08/2011, 20h55
  4. [D7] PBM WebBrowser et cache Internet Explorer
    Par fredfred dans le forum Web & réseau
    Réponses: 2
    Dernier message: 12/10/2007, 17h02
  5. [remote scripting] Pb avec objet Internet.Explorer
    Par PschittN dans le forum Windows
    Réponses: 1
    Dernier message: 06/03/2006, 22h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo