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 :

recuperer des données post de javascript


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut recuperer des données post de javascript
    bonjour,
    je vais vous expliquer ce que je veux faire par l'exemple:
    aller sur google et regardez les "forms" du code source, vous verrez du javascript, la recuperation des données form par simple parsing s'averer donc delicate.

    Je cherche à la recupereration de ces données malgré tout.
    Je pense qu'une solution pour forcer l'analyse serait de mimer un clic sur un bouton, (chose que je sais faire). Malgré tout, je ne sais pas comment recuperer les données "POST" envoyées lorsqu'on clique sur un bouton d'un webbrowser.

    Exise t il un moyen ou un autre de faire ce que je veux faire aux differents niveaux de developpement que je donne ?

    Merci de votre reponse.

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    J'ai pas super bien compris ton problème mais je tente de répondre quand même...

    Regarde dans les différentes solutions proposées dans ce sujet si tu trouves ce que tu cherches :
    http://www.developpez.net/forums/showthread.php?t=67963

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    c'est simple:
    j'ai un webbrowser, un page web chargée dans le webbrowser.
    Dans cette page web il y a un FORM:

    je veux simuler un click dans ce webbrowser (pas besoin d'explication pour ça)
    et je veux ensuite recuperer les données POST qu'envoit le webbrowser au serveur.

    (en fait je voudrais recuperer le header POST en entier avec les données post, ca m'arrange encore plus)

    et puis au pire un petit sniffer de webbrowser irait aussi.

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Dans ce cas, le lien que je t'ai donné devrait aller, non ?
    Sinon, tu as ce sujet qui correspond mieux :
    http://www.developpez.net/forums/sho...d.php?t=158730

    à+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    bon je rexeplique encore

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, OleCtrls, SHDocVw;
     
    type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        Button1: TButton;
        Edit1: TEdit;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure WebBrowser1BeforeNavigate2(Sender: TObject;
          const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
          Headers: OleVariant; var Cancel: WordBool);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    webbrowser1.Navigate(edit1.text);
    end;
     
    procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
     
      begin
     
    if length(postdata)>0 then
    begin
    memo1.clear;
    showmessage(postdata);
     memo1.Lines.Add(postdata);
    end;
     
    end;
     
    end.
    ca a l'air simple ?
    ben ca marche pas ca fait des formats de text bizare.
    idem pour la variable header, c'ets un olevariant mais que je cherche à l'afficher ca met rien.
    Ou est le probleme ?


    'ps: essai avec http://imageshack.us/

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Il me semble qu'il faut connaître le nom du formulaire pour récupérer les données, comme expliqué ici :
    http://www.developpez.net/forums/sho...d.php?t=146124

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    merci mais tout les reponses que tu donnes visent à remplir les formulaires.

    Moi je ne veux pas remplir de formulaire, je veux recuperer les données post, d'un formulaire que j'ai remplit à la main.


    ex:

    POST / HTTP/1.0
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, */*
    Referer: http://imageshack.us/
    Accept-Language: fr
    Content-Type: multipart/form-data; boundary=---------------------------7d636b2620060e
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
    Host: imageshack.us
    Content-Length: 819
    Pragma: no-cache
    Cookie: PHPSESSID=7ba0ab0433aacb383023ea9f86f04a21; __utmc=32157734; imgshck=af141f3c9a6b8582732d6e90e69b57ac; myid=2301222; myimages=36bdf7d0fb4a0f7deeaf4dd3e6d94120; my_imgview=1; __utma=32157734.660472647.1154218271.1154285194.1154285485.6; __utmb=32157734; __utmz=32157734.1154218271.1.1.utmccn=(organic)|utmcsr=google|utmctr=imageshack|utmcmd=organic; flashInstalled=8.0
    Connection: keep-alive
    Browser reload detected...
    Posting 819 bytes...

    mon code visait à recupere le contenu de ces 819 bytes.

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je sais obtenir les données postées mais pas avec le webbrowser, désolé.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    tu saurais malgré tout pourquoi j'obtiens:

    ????????????????????????????????›?????????????=????????????????????????????????????›?????????????=????????????????????????????
    dans mon memo1, a partir du code ci dessus si je clique sur un bouton avec un post associé ?
    en theorie c'ets pas censé plus dur que je ne l'ai fais.

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 875
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 875
    Points : 15 293
    Points
    15 293
    Par défaut
    ????????????????????????????????›?????????????=????????????????????????????????????›?????????????=????????????????????????????
    Ça serait-y pas une histoire de codage de caractères ?
    - wide vs normal ;
    - utf-8 vs iso8859-1 vs windows-1252 (je cite de mémoire) ?

    Moi je chercherais par là

    Mes 2 cts,
    JP

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    oui tu as raison en fait je sais comment resoudre le probleme mais mon code n'est pas operationnel.
    Je posterais la reponse complete quand ca sera fait. Pour les autres membres inutile de repondre.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    bon j'ai toujour spas resolu mon probleme
    voici un code source
    il fait partiellement l'affaire, partiellement car ethercap me donne d'autres variables en plus, mais que la reponse donnée est une reponse partielle correcte.
    Savez vous quel est l'event à utiliser pour intercepter du multipart ?
    (ou si vous savez quoi faire pour tout intercepter)


    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
    65
    66
    67
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, OleCtrls, SHDocVw;
     
    type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        Memo1: TMemo;
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure WebBrowser1BeforeNavigate2(Sender: TObject;
          const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
          Headers: OleVariant; var Cancel: WordBool);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      webbrowser1.Navigate(edit1.text);
    end;
     
    procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
      var
       {$LongStrings On}
      thestring:string;
      {$LongStrings Off}
      thecount:integer;
     
      begin
      if length(postdata)>0 then
    begin
       memo1.clear;
    thestring:='';
     thecount:=0 ;
     
    while true do begin
     thecount:= thecount+1;
    thestring:=thestring+char(strtoint((postdata[thecount])));
    if (strtoint((PostData[thecount+1]))=0) then break;
     
    end;
     memo1.Lines.Add(thestring);
    end;
     
    end;
     
    end.

    en fait ca me fait un prrobleme sur imageshack et pas ailleurs :/
    je pense que c'est lié au multipart, ce qui fait que j'en intercepte qu'une partie.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 60
    Points
    60
    Par défaut
    Voici une solution complete et fonctionnelle

    source et prit du code de :
    http://www.delphidabbler.com/articles?article=14
    (charger du code a partir d'un string)

    et de
    http://delphi.about.com/od/adptips20...rowserhtml.htm
    (recuperer le code source du webbrowser)

    bouton un si le multi part est supporté (ou si le form n'ets pas en multipart)
    et le bouton deux sinon

    ensuite il faut cliquer sur le bouton du post pour visualiser le resultat dans le memo.

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, activex, strutils,mshtml,  StdCtrls, OleCtrls, SHDocVw;
     
    type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        Memo1: TMemo;
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure WebBrowser1BeforeNavigate2(Sender: TObject;
          const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
          Headers: OleVariant; var Cancel: WordBool);
      procedure LoadFromString(const HTML: string);
     procedure LoadFromStream(const Stream: TStream);
     procedure InternalLoadDocumentFromStream(
      const Stream: TStream);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
     procedure Tform1.InternalLoadDocumentFromStream(
      const Stream: TStream);
    var
      PersistStreamInit: IPersistStreamInit;
      StreamAdapter: IStream;
    begin
      Assert(Assigned(WebBrowser1.Document));
      if WebBrowser1.Document.QueryInterface(
        IPersistStreamInit, PersistStreamInit
      ) = S_OK then
      begin
        if PersistStreamInit.InitNew = S_OK then
        begin
          StreamAdapter:= TStreamAdapter.Create(Stream);
          PersistStreamInit.Load(StreamAdapter);
        end;
      end;
    end;
     
     
    procedure TForm1.LoadFromStream(const Stream: TStream);
    begin
     
      InternalLoadDocumentFromStream(Stream);
    end;
     
      procedure TForm1.LoadFromString(const HTML: string);
    var
      StringStream: TStringStream;
    begin
      StringStream := TStringStream.Create(HTML);
      try
        LoadFromStream(StringStream);
      finally
        StringStream.Free;
      end;
    end;
     
     
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      webbrowser1.Navigate(edit1.text);
     
    end;
     
    procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
      var
       {$LongStrings On}
      thestring:string;
      {$LongStrings Off}
      thecount:integer;
     
      begin
     
     
      if length(postdata)>0 then
    begin
       memo1.clear;
    thestring:='';
     thecount:=-1 ;
     
    while true do begin
     thecount:= thecount+1;
    thestring:=thestring+char(strtoint((postdata[thecount])));
     
    if (strtoint((PostData[thecount+1]))=0) then break;
     
    end;
     memo1.Lines.Add(thestring);
    end;
     
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
        iall : IHTMLElement;
    {$LongStrings On}
     ser:string;
     {$LongStrings Off}
     
    begin
       if Assigned(WebBrowser1.Document) then
       begin
         iall := (WebBrowser1.Document AS IHTMLDocument2).body;
     
         while iall.parentElement <> nil do
         begin
           iall := iall.parentElement;
         end;
        ser := iall.outerHTML;
       end;
     
     ser := AnsiReplaceStr(ser, 'multipart/form-data', 'form-data');
     
     LoadFromString(ser);
    end;
     
    end.

Discussions similaires

  1. recuperer des variables post apres du code en javascript
    Par tribalnanasss dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 19/07/2010, 12h22
  2. recuperer des données en POST
    Par touille dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 22/07/2008, 16h52
  3. Recuperer des données d'access
    Par Lucier dans le forum MFC
    Réponses: 18
    Dernier message: 25/11/2004, 10h29
  4. Réponses: 3
    Dernier message: 22/02/2004, 20h09

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