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 :

Entrer infos de pages web par code


Sujet :

Web & réseau Delphi

  1. #1
    bruce-willis
    Invité(e)
    Par défaut Entrer infos de pages web par code
    Bonjour,

    Il s'agit de remplir à partir les Edit de Delphi les champs d'une page web par exemple une page d'inscription ou saisie de mot de passe, voire même recherche sur Google
    C'est à dire GET/POST !!!
    Supposons que je me connecte à partir d'un composant Socket, que vais-je faire s'il y a des cookies !!!

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Tu peux regarder du côté du composant TIdHTTP, si tu peux te contenter de "forger" des requêtes simulant la soumission des formulaires, etc.
    "It's more fun to compute !"

  3. #3
    bruce-willis
    Invité(e)
    Par défaut
    Comment faire pour les cookies si le serveur en utilise?

  4. #4
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Moi aussi je cherche à soumettre un formulaire simple avec TIdHTTP par méthode POST
    Citation Envoyé par Reisubar
    Tu peux regarder du côté du composant TIdHTTP, si tu peux te contenter de "forger" des requêtes simulant la soumission des formulaires, etc.
    Comment forger le TStringList de la fonction Post()? A partir de quoi fait-on les couples NOM = VALEUR, c'est quoi les NOMS (le name des balises INPUT, LABEL)?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    peut-être cette methode http://www.developpez.net/forums/d44...bleme-syntaxe/

    @ Bientôt
    Windows 7 / Debian 8 jessie / Kali 2 / Nas Synology ds214se / Arduino Mega 2560 / Raspberry Pi 3

  6. #6
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Points : 314
    Points
    314
    Par défaut


    je pense que sa va vous aidez....
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
     
      loginurl:='SiteA';
      Params := TStringList.Create;
      try
        cookies:=tstringlist.Create;
     
          html:=idhttp1.Get(loginurl);// Premier(s) cookie(s)
     
          count:=IdCookieManager1.CookieCollection.count;
          for i:=1 to count do
          begin
            cookies.Add(IdCookieManager1.CookieCollection.Items[i-1].CookieText);
            showmessage(IdCookieManager1.CookieCollection.Items[i-1].CookieText);
          end;
          html:=idhttp1.Get(loginUrl); // pour avoir VIEWSTATE
     
          poz:=pos('name="__VIEWSTATE" value="',html);
          delete(html,1,poz+25);
          viewstate:=copy(html,1,pos('"',html)-1);
          showmessage(IntToStr(poz));
          showmessage(viewstate);
          Params.Values['__VIEWSTATE'] := viewstate;
          Params.Values['TxtUsername'] := 'tarowras';
          Params.Values['TxtPassword'] := '12345';
          Params.Values['BtnLogin'] := 'Login';
     
          setCookies;
          IdHTTP1.HandleRedirects:=false;
          try
            HTML := IdHTTP1.Post(loginurl, Params);
     
          except on e: EIdHTTPProtocolException do
             begin
               if e.ReplyErrorCode<>302 then
                 raise e;
     
               count:=IdCookieManager1.CookieCollection.count;  // Pour le UserID et Password
               for i:=1 to count do
               begin
                 cookies.Add(IdCookieManager1.CookieCollection.Items[i-1].CookieText);
                 showmessage('Etape 2 : '+IdCookieManager1.CookieCollection.Items[i-1].CookieText);
               end;
     
               setcookies;
               html:=idhttp1.Get(IdHTTP1.Response.Location);// follow redirect
                memo1.Lines.add(IdHTTP1.Get('SiteB'));
             end;
          end;
     
          Params.Free;
     
    end;
    voila A+
    "Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"

  7. #7
    bruce-willis
    Invité(e)
    Par défaut
    Envoyer des infos par POST est-il possible? J'en doute car j'avais soumis une réponse d'un forum et cela a échoué car lors de la redirection, IdHTTP utilise encore POST avec la même donnée

    Mon autre question concerne les espaces et caractères accentués dans le texte à envoyer? Qui transforme ces textes comme ça: idhttp?

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 710
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 710
    Points : 13 174
    Points
    13 174
    Par défaut
    Citation Envoyé par bruce-willis Voir le message
    Envoyer des infos par POST est-il possible? J'en doute car j'avais soumis une réponse d'un forum et cela a échoué car lors de la redirection, IdHTTP utilise encore POST avec la même donnée
    Ce qui me paraît assez normal !
    Admettons que pour maintenance je redirige temporairement mon site sur un serveur mirroir. Mon script ne c'est pas subitement transformé pour gérer des GET à la place de POST. Imaginons aussi que j'y passe un nom d'utilisateur et un mot de passe, ils deviendraient alors visibles dans la barre d'adresse...

    Et j'ai même utilisé ce principe pour me logué sur plusieurs serveurs avec une seule fenêtre d'authentification .

    Citation Envoyé par bruce-willis Voir le message
    Mon autre question concerne les espaces et caractères accentués dans le texte à envoyer? Qui transforme ces textes comme ça: idhttp?
    idHTTP avec des widestring en POST (D2009). Je met à jour un serveur MySQL mutualisé à travers des scripts php. (Je dois pouvoir travailler en chinois )

  9. #9
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Citation Envoyé par bruce-willis Voir le message
    Mon autre question concerne les espaces et caractères accentués dans le texte à envoyer? Qui transforme ces textes comme ça: idhttp?
    La réponse est un peu dans la faq: http://delphi.developpez.com/faq/?pa...indysimulerget en utilisant la fonction IdHTTP.URL.PathEncode() mais le problème lorsque j'ai testé c'est

    1) Cela ne change pas les espaces en + mais en %20

    2) Il y a l'exception EConvertError 'Invalid Argument to date encode' lors du IdHTTP.Get()
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 710
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 710
    Points : 13 174
    Points
    13 174
    Par défaut
    Citation Envoyé par randriano Voir le message
    1) Cela ne change pas les espaces en + mais en %20
    C'est la façon standard de coder les caractères invalides d'une URL. La valeur numérique du caractère (hexa) précédé d'un %.

    Citation Envoyé par randriano Voir le message
    2) Il y a l'exception EConvertError 'Invalid Argument to date encode' lors du IdHTTP.Get()
    Là, tu t'attends à ce que ton script te renvoi une chaîne représentant une date. Malheureusement, le format ne correspond pas à tes paramètres régionaux et StrToDate échoue ! Le GET lui à parfaitement fonctionné

  11. #11
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Voici mon code ayant cette exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Fs : TFileStream;
    begin
          Fs := TFileStream.Create('search_result.htm',fmCreate);
          with IdHTTP1 do
          begin
              Request.BasicAuthentication := True; //Auth. BASIC
              Get(Format('http://www.google.com/search?hl=fr&q=%s&btnG=Recherche+Google&lr=',[URL.PathEncode(SearchEdit.Text)]),Fs);
          end;
    end;
    Comme vous le voyez, j'aimerais seulement pouvoir effectuer une recherche google par IdHTTP, les mot-clés tapés dans un TEdit SearchEdit
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 710
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 710
    Points : 13 174
    Points
    13 174
    Par défaut
    Ben j'ai fais un essai et ça fonctionne

    PS: Il te manque un Fs.Free.

  13. #13
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 437
    Points
    1 437
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ben j'ai fais un essai et ça fonctionne

    PS: Il te manque un Fs.Free.
    Le Fs.Free ok!

    Mais l'exception! Je l'ai toujours mais seulement sous Delphi, j'ai pas bien précisé avant, j'irai même jusqu'à penser que c'est un bug car il n'y a pas le messagebox qui s'affiche après alors que je n'utilise pas try ... except ... ni décocher son affichage dans les options
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/10/2009, 13h05
  2. [ASP.NET] Gestion des page WEB par IIS
    Par pc152 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 20/06/2007, 11h06
  3. Envoyer page web par Email
    Par achos dans le forum Outlook
    Réponses: 8
    Dernier message: 04/04/2007, 14h53
  4. Réponses: 5
    Dernier message: 20/08/2006, 12h32
  5. [Mail] envoyer une page web par mail
    Par Zen_Fou dans le forum Langage
    Réponses: 8
    Dernier message: 06/04/2006, 17h06

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