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

Langage Delphi Discussion :

Récupérer le contenu d'une page internet


Sujet :

Langage Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Récupérer le contenu d'une page internet
    Bonjour,

    Après quelques mois sur Java, je reviens sur Delphi pour un projet perso.

    Je souhaite récupérer le contenu d'une page, jusque la rien de plus simple ..
    J'ai posé un TidHTTP sur mon appli et je l'utilise comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm3.Button2Click(Sender: TObject);
    var
       s : string;
    begin
       s := IdHTTP2.Get('https://www.whisky.fr/marque/jack-daniel-s.html');
       ShowMessage(s);
    end;
    Je ne sais pas pourquoi, pour cette page je récupère un javascript et non le code source comme ci j'allais le voir manuellement depuis mon navigateur..

    Idem avec le AllowCookie et HandleRedirect, ou le composant TNetHttpClient.

    Avez-vous déjà eu ce cas ?

    Merci

  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 614
    Points
    3 614
    Par défaut
    Bonne question, aucune idée de la raison, un wget en console rapatrie bien le source du HTML.

    Par contre tu devrais t'habituer à utiliser les composants TNetHTTPClient et TNetHTTPRequest si tu accèdes à des sites en https, au moins ça t'évitera les problèmes de mises à jour de la librairie SSL.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    le fait de récupérer la page dans un String ne doit pas aider. Au premier caractère #0 rencontré => fin de ligne.

    Je verrais plus une codification comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm3.Button2Click(Sender: TObject);
    var ms : TMemoryStream;
    begin
    ms:=TMemoryStream.Create;
    try
      NetHTTPClient1.Get('https://www.whisky.fr/marque/jack-daniel-s.html',ms);
      ms.Position:=0;
      Memo1.Lines.LoadFromStream(ms);
    finally
      ms.Free;
    end;
    end;
    @patrick avec NetHttpClient pour te faire plaisir

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    mais que cherches-tu dans cette page ? car de fait cette page contient bcp de javascript (Ctrl+U sous Chrome pour voir la page telle qu'elle est chargée).

  5. #5
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    et si c'était du JSON, comment le récupérer et le décoder ??

  6. #6
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 480
    Points
    480
    Par défaut
    Citation Envoyé par aladin95 Voir le message
    et si c'était du JSON, comment le récupérer et le décoder ??

    tu récupères le contenu de le même façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sResponse := IdHTTP.Get('http://monUrlQuiRetourneDuJSON');
    Et ensuite tu parses ton JSON pour obtenir les valeurs

    Exemple


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    aJSON := TJSONObject.Create;
    aValue := aJSON.ParseJSONValue(sResponse);
    Il doit y avoir des tutos sur le site pour la façon de parser le JSON. Tout dépendra de sa structure.

    Si tu as une question particulière, tu peux ouvrir un nouveau sujet.

  7. #7
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    merci de ta réponse.
    mais j'ai une erreur ssl sur le GET

    peut-on utiliser NetHTTPClient qui semble éviter ce problème mais que je n'arrive pas a utiliser.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    La discussion de départ était sur une page web HTML. Comment en a t-on pu dériver sur du JSON ?

  9. #9
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    ho ben c'est simple..
    Je dois récupérer des données sur un site qui propose des API.

    Par le débogueur REST ca passe pas.

    Examinant les éléments de doc du site, j'ai trouvé que je peux récupérer une page web qui ressemble bougrement a du json avec une simple requête ou je peux ajouter les paramètres spécifiques aux données a récupérer.

    Sur cette discussion, j'ai pu récupérer les données dans un fichier texte.
    Donc reste a décoder le fichier texte pour rechercher mes données
    OU essayer de récupérer du json direct et ce sera a priori plus facile a extraire les données utiles.

    voila le cheminement ..

    si tu veux plus de détails.. mais en privé car je veux pas saturer ledit site par les visiteur d'ici

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par aladin95 Voir le message
    merci de ta réponse.
    mais j'ai une erreur ssl sur le GET

    peut-on utiliser NetHTTPClient qui semble éviter ce problème mais que je n'arrive pas a utiliser.
    "une erreur ssl"...c'est vague, mais c'est très probablement lié soit à la version de OpenSSL, Indy ne supporte pas la dernière version, soit à la version de TLS configurée, c'est souvent TLS 1.2 qui est réclamé ces temps ci.

    mais ta question est comment récupérer du JSON, pas comment éviter une erreur SSL

  11. #11
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    en complément d'info, voici le message de l'exception
    Erreur lors de la connexion avec SSL. EOF : violation du protocole.

    Je ne maitrise pas vraiment cette technologie (REST et JSON) alors je n'ai pas de préférence a propos de la méthode si j'arrive a gérer ces données.

    merci a tous de votre aide

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    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 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Peut-être que fournir le code pourrait aider à savoir ce qui aurait été oublié
    Fournir aussi les paramètres fourni en Design Time et Run Time, surtout que le sujet c'était récupérer une page HTML et qu'il a été détourné vers un sujet JSON
    On ignore la version de Delphi, on ignore si c'est du TidHTTP, TNetHTTPClient, TRESTClient, il faudrait déjà par bien définir cela

    Si Indy, vos deux DLL SSL doivent surement être mise à jour, sachez que plein de logiciel les installe, il est possible de les récupérer sur son propre PC avant de se lancer sur le net à la recherche de binaire d'origine douteuse.

    Par le débogueur REST ca passe pas.
    Cela semble mal parti !

    Essayer l'outil Postman !

  13. #13
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    - Pour le moment, y a pas de code car je ne sais pas quelle méthode choisir.
    - avec Postman ca marche mais pas avec débogueur REST.


    j'ai expliqué mon cheminement ... une url et les données arrivent a priori en json en page web.
    j'attends une analyse de Sergio..
    je veux pas forcement mettre tout le monde sur le pont ;-)

    merci .. je reviendrai peut-être..

  14. #14
    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 614
    Points
    3 614
    Par défaut
    Si REST Debugger ne passe pas (je suppose en version 10.4 ?), il faut tester un Get dans un THTTPClient (de System.net.HttpClient) pour voir ce que ça donne.

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 268
    Points : 41 671
    Points
    41 671
    Billets dans le blog
    64
    Par défaut
    Tout d'abord, un GROS PS je suggère de faire de cette partie JSON, une autre discussion, peut-être plus dans le sous-forum web. En cas d'accord je m'en chargerai, il me suffit d'un titre et d'un peu d'huile de doigts

    Citation Envoyé par pprem Voir le message
    Si REST Debugger ne passe pas (je suppose en version 10.4 ?),
    Si, ça passe du moins en ai-je réussi une sans trop de difficulté, avec l'aide du site en question c'est une question de lecture

    Un petit truc j'ai remarqué qu'il ne fallait pas utiliser la paramètre pretty qui est en fait l'utilisation de l'enjoliveur quand on passe directement par un explorateur web (c'est peut-être là que cala bloquait lors de tes essais)

    [EDIT]
    Ce matin, j'améliore ma réponse. Déjà en proposant une requête JSON qui fonctionne avec REST en pj (pour plus de facilité à renommer en .json), deux solutions différentes pour une même requête (une sans parmètre, l'autre avec)
    et un petit écran REST pour montrer que c'est possible
    Nom : Capture.PNG
Affichages : 850
Taille : 48,2 Ko
    Comme l'a justement indiqué Patrick, le REST debugger de la 10.4 est légèrement différent de celui de la 10.3 (lequel, brusquement, m'avait posé souci) j'ai donc aussi fait un test avec celui de la 10.3 qui fonctionne aussi.

    Attention quand même les données ne sont pas toujours nickel chrome, surtout pour cette API Beta contenant des erreurs de type de colonne
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. récupérer le contenu d'une page web
    Par marielaure2805 dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2007, 14h12
  2. Récupérer le contenu d'une page web
    Par smarties dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/02/2007, 02h25
  3. Récupérer du texte d'une page internet
    Par PorkyFighter dans le forum C
    Réponses: 2
    Dernier message: 11/11/2006, 22h55
  4. Récupérer le contenu d'une page PHP
    Par Pragmateek dans le forum Réseau
    Réponses: 37
    Dernier message: 28/05/2006, 23h00
  5. [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, 16h47

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