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 :

Récupérer le JSON d'un lien Web


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    juillet 2017
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2017
    Messages : 264
    Points : 42
    Points
    42
    Par défaut Récupérer le JSON d'un lien Web
    Bonjour j'ai un lien web d'un JSON en ligne et je souhaiterais le récupérer pour le traiter en Delphi.
    Seulement j'ai vu que dans ma version de Delphi (la 10.3) le composant TWebBrowser n'existe plus (est-ce à cause de la fin d'IE ?)
    Merci de m'aider
    Bien cordialement

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 1 876
    Points : 3 609
    Points
    3 609
    Par défaut
    Hello

    Le TWebBrowser ne servirait qu'à faire l'affichage du fichier depuis son URL.

    Si tu veux rapatrier le contenu utilise soit les composants TRESTxxx, soit directement un THTTPClient.get()

    exemple sur https://github.com/DeveloppeurPascal...ypes/Unit1.pas

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    juillet 2017
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2017
    Messages : 264
    Points : 42
    Points
    42
    Par défaut
    ok merci

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    13 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 192
    Points : 24 189
    Points
    24 189
    Par défaut
    On peut se passer de composant, les API Windows le permettent nativement, on profite du HTTPS à jour de Windows d'ailleurs (contrairement à Indy)

    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
    procedure GetInternetFile(const AServerName: string; const AURL: string; AStream: TStream);
    const
      BufferSize = 1024;
      accept: packed array[0..1] of LPWSTR = (PChar('text/*'), nil); // PCTSTR rgpszAcceptTypes[] = {_T(“text/*”), NULL};
    var
      hSession, hHTTP, hReq : HINTERNET;
      Buffer: array[1..BufferSize] of Byte;
      BufferLen: DWORD;
      sAppName: string;
    begin
      AStream.Size := 0;
      sAppName := ExtractFileName(Application.ExeName);
     
      hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      try
        // pour HTTPS : INTERNET_DEFAULT_HTTPS_PORT
        hHTTP := InternetConnect(hSession, PChar(AServerName), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 1);
        try
          hReq := HttpOpenRequest(hHTTP, PChar('GET'), PChar(AURL), nil, nil, @accept, 0, 1);
          try
            if HttpSendRequest(hReq, nil, 0, nil, 0) then
            begin
              BufferLen := 0;
              repeat
                if InternetReadFile(hReq, @Buffer, BufferSize, BufferLen) then
                  AStream.WriteBuffer(Buffer, BufferLen);
     
              until BufferLen = 0;
            end
            else
              raise Exception.Create('HttpOpenRequest failed. ' + SysErrorMessage(GetLastError));
          finally
            InternetCloseHandle(hReq);
          end;
        finally
          InternetCloseHandle(hHTTP);
        end;
      finally
        InternetCloseHandle(hSession);
      end;
    end;

    exemple si un site des cours des métaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if IndyMode then
          idhttpt.Get('https://www.cookson-clal.com/cours/cours.jsp?table=fins&datearch='+DateStr,Mystreamt)
        else
          GetInternetFile('www.cookson-clal.com', '/cours/cours.jsp?table=fins&datearch='+FormatDateTime('dd/mm/yyyy', MaDate), Mystreamt);







    Ensuite est-ce un JSON en ligne ou un service REST, ce n'est pas forcément la même méthode d'accès, il peut y avoir un Token type OAuth2.0 pour un WebService REST, et l'utilisation du CRUD où chaque verbe HTTP a un sens fonctionnel.
    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

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    juillet 2017
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2017
    Messages : 264
    Points : 42
    Points
    42
    Par défaut
    en cherchant sur Internet j'ai trouvé plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function DownloadFile(SourceFile, DestFile: string): Boolean;
    begin
      try
        Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
      except
        Result := False;
      end;
    end;
    s'utilise avec

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 1 876
    Points : 3 609
    Points
    3 609
    Par défaut
    C'est vrai que j'aurais pu t'envoyer sur https://github.com/DeveloppeurPascal...u_download.pas qui fait le job et a l'avantage d'être multiplateformes, contrairement à une solution qui utilise des commandes de l'API de Windows et ne fonctionnera donc que sous Windows

    A noter qu'il y a un nouveau type de stream à partir de la 11.1 Alexandria de Delphi qui fait le téléchargement de fichiers depuis une URL.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    juillet 2017
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2017
    Messages : 264
    Points : 42
    Points
    42
    Par défaut
    merci mais Windows me suffit, j'ai réussi

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/02/2018, 00h12
  2. Lancer une application à partir d'un lien web
    Par jayce_84 dans le forum ASP
    Réponses: 4
    Dernier message: 16/02/2006, 10h30
  3. lien web
    Par xboulney dans le forum Access
    Réponses: 12
    Dernier message: 13/02/2006, 16h15
  4. [Servlet]Récupérer le contenu d'une page web
    Par Jarodnet dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 06/10/2005, 15h47
  5. [HTML] pbm passage du caractère & dans lien web
    Par fab22montpellier dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 13/09/2005, 21h17

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