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

Delphi Discussion :

Programme sous Windows server 2012 R2 standard


Sujet :

Delphi

  1. #1
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut Programme sous Windows server 2012 R2 standard
    Bonsoir à tous,

    j'ai développé une application permettant de récupérer des pages Web via un TWebbrowser me permettant de mettre à jour
    un annuaire.
    Sous environnement serveur windows 32 bits, je n'avais aucun souci.
    Après quelques tests, je m'aperçois que le composant TWebbrowser est inactif en 64 bits !
    comment résoudre cette difficulté ?
    merci

  2. #2
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Peut etre avec un THttpRequest de indy

  3. #3
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    merci guillemouze,

    je n'ai pas à priori le composant THttpRequest à moins qu'il s'agit d'une classe qu'il faut instancier..(je suis sous Delphi 7)
    autre précision, l'objectif est de récupérer les infos des pages et non le source.
    or celles-ci sont toutes codées en JavaScript..
    Donc, il me faut quelque chose qui les visualisent et qui ensuite permet d'effectuer un copier coller des données.
    ce que je faisais très bien avec le TWebbrowser que je pouvais même ensuite parser etc.

    ?

    j'ai bien tenté ceci :
    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
     
    procedure DownloadHTTP(const AUrl: string; AStringList: TStrings);
    begin
      with TIdHTTP.Create(Application) do
      try
        try
          AStringList.Text := Get(AUrl);
        except
        end;
      finally
        Free;
      end;
    end;
     
    procedure THTMLForm.Button4Click(Sender: TObject);
    begin
      DownloadHTTP(MyURL, Memo1.Lines);
    end;
    mais, rien ne s'affiche dans le mémo (toutefois certaines adresses passent..)
    j'ai essayé avec un TMemoryStream, sans succès..
    avec www.developpez.com, par exemple ça ne fonctionne pas
    il doit y avoir un truc comme dab..

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    essaye comme ca :
    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
    procedure DownloadHTTP(const AUrl: string; AStringList: TStrings);
    begin
      with TIdHTTP.Create(Application) do
      try
        try
          Host := AUrl;
          AStringList.Text := Get('/');
        except
        end;
      finally
        Free;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    const
      myurl = 'www.developpez.com';
    begin
      DownloadHTTP(MyURL, Memo1.Lines);
    end;

  5. #5
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    host non reconnu..

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    De toute façon, TIdHTTP ne lance pas le JS. Donc si tes données sont issues d'un WebService appelé en AJAX cela ne passer pas !
    Donc soit toutes les données sont présentes dans le HTML produit par le Serveur Web dès le début, faut donc te faire un parser de HTML, cela se bricole assez facilement, on doit trouver des sujets sur le forum (dont j'ai pris part)
    Soit, les données sont récupérés par le JS et donc tu pourrais récupérer l'URL qu'utilise le JS pour appeler directement le WS, il est avec un peu de chance en REST, sinon en SOAP

    Enfin si TIdHTTP se montre récalcitrant, tu peux le faire à la main avec les API Windows comme dans ce sujet : IdHttp.post ne retourne rien

    Avec les Input renseigné avec :
    - 'Server Name' = "www.developpez.net"
    - 'URL' = "forums/d1603192/environnements-developpement/delphi/programme-sous-windows-server-2012-r2-standard/#post8745829"
    - 'Params' = "" rien, juste OK sans rien mettre !
    Cela retourne près de 260 Ko de HTML (le contenu de notre conversation)

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    procedure TZooShaiVCLMainForm.btnDownloadURLClick(Sender: TObject);
    const
      BufferSize = 1024;
      accept: packed array[0..1] of LPWSTR = (PChar('text/*'), nil); // PCTSTR rgpszAcceptTypes[] = {_T(“text/*”), NULL};
    var
      ServerName, URL, Params, LocalFileName: string;
      hSession, hHTTP, hReq : HINTERNET;
      Buffer: array[1..BufferSize] of Byte;
      BufferLen: DWORD;
      sAppName: string;
      FS: TFileStream;
      Headers: string;
      Data: RawByteString;
    begin
      sAppName := ExtractFileName(Application.ExeName);
     
      hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      try
        if not InputQuery('Download URL', 'Server Name', ServerName) then
          Exit;
     
        hHTTP := InternetConnect(hSession, PChar(ServerName), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 1);
        try
          if not InputQuery('Download URL', 'URL', URL) then
            Exit;
     
          hReq := HttpOpenRequest(hHTTP, PChar('POST'), PChar(URL), nil, nil, @accept, 0, 1);
          try
            Headers := 'Content-Type: application/x-www-form-urlencoded; charset=utf-8';
     
            if not InputQuery('Download URL', 'Params', Params) then
              Exit;
     
            Data := UTF8Encode(Params);
            if HttpSendRequest(hReq, PChar(Headers), length(Headers), PAnsiChar(Data), length(Data)) then
            begin
              LocalFileName := StringReplace(URL, '/', '_', [rfReplaceAll]);
              if not PromptForFileName(LocalFileName, '', '.txt', 'Download URL into Local File', '', True) then
                Exit;
     
              FS := TFileStream.Create(LocalFileName, fmCreate);
              try
                BufferLen := 0;
                repeat
                  if InternetReadFile(hReq, @Buffer, BufferSize, BufferLen) then
                    FS.WriteBuffer(Buffer, BufferLen);
     
                until BufferLen = 0;
              finally
                FS.Free;
              end;
            end
            else
              raise Exception.Create('HttpOpenRequest failed. ' + SysErrorMessage(GetLastError));
          finally
            InternetCloseHandle(hReq);
          end;
        finally
          InternetCloseHandle(hHTTP);
        end;
      finally
        InternetCloseHandle(hSession);
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Salut ShaiLeTroll, (+1)

    j'ai repris le code de la FAQ et ça fonctionne
    je ne sais pas pourquoi, je ne l'ai pas vu..
    il faut que je teste maintenant si ça marche sur mon serveur 64 bits
    et refaire le parser..

    MERCI

    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
     
    function THTMLForm.DownloadFileHttp(const fileURL, FileName: string): Boolean;
    const
      BufferSize = 1024;
    var
      hSession, hURL: HInternet;
      Buffer: array[1..BufferSize] of Byte;
      BufferLen: DWORD;
      f: file;
      sAppName: string;
      FS: TFileStream;
    begin
      Result := False;
      sAppName := ExtractFileName(Application.ExeName);
      hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
        'xxx_Login_Proxy_Nom Utilisateur_xxx', 'xxx_Login_Proxy_Mot_de_Passe_xxx', 0);
      if FileExists(FileName) then
        DeleteFile(FileName);
      FS := TFileStream.Create(FileName, fmCreate);
      try
        hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
        try
          repeat
            InternetReadFile(hURL, @Buffer, BufferSize, BufferLen);
            FS.WriteBuffer(Buffer, BufferLen);
            Label1.Caption := IntToStr(fs.Size);
          until BufferLen = 0;
          Result := True;
        finally
          InternetCloseHandle(hURL)
        end
      finally
        InternetCloseHandle(hSession);
        FS.Free;
      end
    end;
     
    procedure THTMLForm.Button5Click(Sender: TObject);
    begin
      if DownloadFileHttp(MyURL, 'c:\ProgD7\essai.txt') then
        showMessage('ok');
    end;

  8. #8
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    @ShaiLeTroll
    à noter une incompatibilité en Char et WideChar dans le code fourni précédemment

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    A quel moment, il y a un soucis ?

    le code de la FAQ qui doit dater de Delphi 7 (même si mis à jour en 2014),
    il fonctionne en Byte (surement la modification de 2014 pour éviter les méandres du CharSet),
    donc le fichier téléchargé est tel que l'a retourné le serveur qui lui a forcément choisi un encodage !
    UTF8 ? Latin1 ? cela doit se gérer par les entêtes tout ça
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    @ShaiLeTroll :
    Il s'agit d'une erreur à la compilation..
    @+

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Ah, je ne peux pas t'aider car cela compile très bien sur XE2
    J'essayerais sur Berlin si j'ai le temps
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    c'est très gentil de ta part
    mais je ne pense pas que cela soit utile
    car je suis sous D7 et cette erreur doit être normale..
    le code de LA FAQ fonctionne bien sous seven 32 bits
    va t-il marcher sous windows 2012 R2 64 bits ?

    Je fais les tests cet après-midi.

    @+

  13. #13
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    @ShaiLeTroll
    Le programme fonctionne sous windows 2012 R2 64 bits
    ouf !

    merci

    @bientôt

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

Discussions similaires

  1. Compatibilité Borland C++ 6 sous Windows Server 2012 64 bits
    Par bachelre dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 11/02/2015, 14h18
  2. Plusieurs domaines AD DS sous Windows Server 2012
    Par Manoa131 dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 13/08/2014, 16h44
  3. Réponses: 3
    Dernier message: 04/07/2014, 21h23
  4. Hyper v avec teaming sous windows server 2012
    Par laurent66000 dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 29/04/2014, 16h41
  5. Nouvelles formations sur Microsoft Hyper-V R3 sous Windows Server 2012
    Par Hinault Romaric dans le forum Certifications
    Réponses: 1
    Dernier message: 31/01/2013, 17h46

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