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 :

Lire le contenue d'une page web généré par Ajax


Sujet :

Web & réseau Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Lire le contenue d'une page web généré par Ajax
    Bonjour,

    Je cherche pour l'un de mes projets à lire le contenue d'une page générée par Ajax.

    Le problème est qu'Ajax étant Asynchrone un http1.get ne permet pas d'avoir le contenue. J'ai tenté d'ajouter un WebBrowser pour lire le code html grâce aux événements DocumentComplete (et autre) cela me donne toujours le code de la page (et des JS) mais pas du contenue récupéré en Ajax par le site.

    J'ai fouillé sur Google et tombe principalement sur des explications d'utilisation des composants serveurs de Delphi dans ce domaine. Quelqu'un aurait il une piste s'il vous plait ?

    Pour vous guider sur ce que je cherche voici un site sur le quel cela ne fonctionne pas : http://fr.10bet.com/sports/

    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    En général, les requêtes AJAX retournent du JSON et pas de l'html.
    C'est un langage de description semblable à XML qui permet de décrire tout type de données et qui peut facilement s'évaluer en JavaScript pour créer les éléments HTML de la page.
    Si tu veux récupérer le résultat d'une requête AJAX en Delphi il va te falloir un parser JSON.
    Fait une recherche sur "JSON" et "Delphi" et tu devrais trouver facilement ton bonheur...

  3. #3
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    normalement Ajax peu fonctionner en mode synchrone...

    En général, les requêtes AJAX retournent du JSON et pas de l'html.
    Pas d'accord Ajax retourne n'importe quel type de donne il faut juste veiller de proterger le texte avant de l recevoir

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir et merci de ta réponse.

    Effectivement il y a du JSON. Je connais un peu le fonctionnement du JSON, j'ai déjà adapté des scripts qui en exploitaient.

    A vrai dire j'ai lancé Firebug (plug in firefox) pour voir les GET et POST que le site fait. Au final il y a des commandes type : GET GetBranchFilters?branchId=6 etc... Ce que je ne vois pas c'est comment faire pour exécuter ces commandes et remonter les résultats dans Delphi.

    J'ai lancé via Telnet :
    GET http://fr.10bet.com/pagemethods.aspx...ers?branchId=6
    Le site me retourne la liste des fonctions avec les arguments attendus mais pas le contenue.

    Est-il possible de récupérer le contenue JSON (si possible sans utiliser TWebbrowser qui doit visualiser la page (donc très lourd)).

    Est-il possible de lancer des commandes javascript lors d'un HTTP1.GET ?

    Merci encore pour l'aide apportée.

  5. #5
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Tu peux importer le controle comme ActiveX cherche du cote XML,XmlRequest
    cliquer sur Composants--- imoprter

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Citation Envoyé par Montor Voir le message
    Pas d'accord Ajax retourne n'importe quel type de donne il faut juste veiller de proterger le texte avant de l recevoir
    C'est bien pour ça que j'ai dit "en général". Ce n'est pas obligatoire, mais c'est ce qu'il y a de plus courant. Ne serait-ce que parce qu'ensuite, il suffit de faire un eval en JavaScript pour reconstituer la page.

    Est-il possible de récupérer le contenue JSON (si possible sans utiliser TWebbrowser qui doit visualiser la page (donc très lourd)).
    Il suffit de faire une requête HTTP avec n'importe quel composant qui le permette.
    Tu peux le faire avec les composants Indy. Tu peux le faire avec WinINET (ce sera un peu plus compliqué...).

    Tu vas faire un GET sur une URL et recupérer le texte de la réponse HTTP.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Après avoir fait quelques petites recherche sur JSON et tout le reste je comprends mieux comment il fonctionne. En fait le résultat nous est envoyé comme lors d'un "GET normal". J'arrive donc maintenant à passer une requête et récupérer le JSON.

    J'ai installer un Parser (trouvé sur le site JSON.ORG) pour Delphi.

    Mon dernier problème est le suivant :

    Sous firebug je vois les GET et POST qu'il fait. Hors quand je lui soumet le même GET via mon browser j'ai la liste des commandes et les arguments attendus aulieu d'avoir le fichier JSON.

    Voici la sortie de Firebug :

    Si je copie colle l'URL (exemple : http://fr.10bet.com/pagemethods.aspx/GetBranches?) dans mon navigateur directement j'obtient pas le fichier JSON attentdu mais ca :

    var PageMethods={Base:"/pagemethods.aspx/GetBranches",
    getBranchFilters:function(__branchId,__sc, __ec, __cc) {var p={branchId:__branchId};AJAX.call(false,this.Base,"getBranchFilters",p,__sc, __ec, __cc);},
    GetLeaguesContent:function(__BranchID,__LeaguesCollection,__sc, __ec, __cc) {var p={BranchID:__BranchID,LeaguesCollection:__LeaguesCollection};AJAX.call(true,this.Base,"GetLeaguesContent",p,__sc, __ec, __cc);},
    LiveContent:function(__BranchID,__sc, __ec, __cc) {var p={BranchID:__BranchID};AJAX.call(false,this.Base,"LiveContent",p,__sc, __ec, __cc);},
    UpdateEvents:function(__requestString,__sc, __ec, __cc) {var p={requestString:__requestString};AJAX.call(true,this.Base,"UpdateEvents",p,__sc, __ec, __cc);},
    EventData:function(__SourceData,__sc, __ec, __cc) {var p={SourceData:__SourceData};AJAX.call(true,this.Base,"EventData",p,__sc, __ec, __cc);},
    GetAllEvents:function(__masterID,__sc, __ec, __cc) {var p={masterID:__masterID};AJAX.call(false,this.Base,"GetAllEvents",p,__sc, __ec, __cc);},
    GetAllLiveEvents:function(__masterID,__sc, __ec, __cc) {var p={masterID:__masterID};AJAX.call(false,this.Base,"GetAllLiveEvents",p,__sc, __ec, __cc);},
    GetBranches:function(__sc, __ec, __cc) {var p={};AJAX.call(false,this.Base,"GetBranches",p,__sc, __ec, __cc);},
    GetComingSoon:function(__pageSize,__pageCount,__pageSet,__sc, __ec, __cc) {var p={pageSize:__pageSize,pageCount:__pageCount,pageSet:__pageSet};AJAX.call(false,this.Base,"GetComingSoon",p,__sc, __ec, __cc);},
    allLiveContent:function(__sc, __ec, __cc) {var p={};AJAX.call(false,this.Base,"allLiveContent",p,__sc, __ec, __cc);},
    plannedLiveContent:function(__sc, __ec, __cc) {var p={};AJAX.call(false,this.Base,"plannedLiveContent",p,__sc, __ec, __cc);},
    ...............
    GetTotopotToken:function(__sc, __ec, __cc) {var p={};AJAX.call(true,this.Base,"GetTotopotToken",p,__sc, __ec, __cc);},
    GetCacheResults:function(__timeFilter,__branchID,__leagueID,__sc, __ec, __cc) {var p={timeFilter:__timeFilter,branchID:__branchID,leagueID:__leagueID};AJAX.call(false,this.Base,"GetCacheResults",p,__sc, __ec, __cc);}};

    Quelqu'un sait pourquoi ?

    Merci d'avance.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai une bonne nouvelle, ca marche !

    Avant de vous expliquer ce qui manquait, je tiens à vous remercier!

    En fait avec le composant IdHTTP1 (comme sur tous les autres). Il faut ajouter les éléments d'entête dont un qui ne figure pas dans la palette et qu'il faut ajouter soit même dans : CustomHeaders.

    Dans mon cas si quelqu'un est intéressé c'était (et oui c'était évident) :
    RequestTarget:AJAXService

    Au final voila le paramétrage de l'objet complet :

    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
      object IdHTTP1: TIdHTTP
        AllowCookies = True
        ProxyParams.BasicAuthentication = False
        ProxyParams.ProxyPort = 0
        Request.Connection = 'keep-alive'
        Request.ContentLength = -1
        Request.ContentType = 'application/x-www-form-urlencoded'
        Request.CustomHeaders.Strings = (
          'RequestTarget:AJAXService')
        Request.Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
        Request.AcceptCharSet = 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'
        Request.AcceptEncoding = 'gzip,deflate'
        Request.AcceptLanguage = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
        Request.BasicAuthentication = False
        Request.Host = 'fr.10bet.com'
        Request.Referer = 'http://fr.10bet.com/sports/hand_ball/'
        Request.UserAgent =
          'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.1.11) Gecko/' +
          '20100701 Firefox/3.5.11'
        HTTPOptions = [hoForceEncodeParams]
        CookieManager = IdCookieManager1
        Compressor = IdCompressorZLib1
        Left = 152
        Top = 152
      end
      object IdCookieManager1: TIdCookieManager
        Left = 160
        Top = 72
      end
      object IdCompressorZLib1: TIdCompressorZLib
        Left = 40
        Top = 184
      end
    Merci. Bonne soirée.

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

Discussions similaires

  1. Lire le contenu d'une page Web
    Par senacle dans le forum Langage
    Réponses: 4
    Dernier message: 03/03/2010, 10h27
  2. [JSP][WEB] recuperer le contenu d'une page web
    Par ypikahe dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 14/03/2008, 10h10
  3. Lire le contenu d'une page web grâce à un script PHP
    Par BloodyImp dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2005, 22h29
  4. copier le contenu d'une page web dans un fichier texte
    Par wassila dans le forum C++Builder
    Réponses: 30
    Dernier message: 28/08/2005, 22h27
  5. Réponses: 2
    Dernier message: 16/07/2004, 09h30

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