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

Lazarus Pascal Discussion :

Traduction code JQuery en Lazarus : connection POST à un site [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut Traduction code JQuery en Lazarus : connection POST à un site
    Bonjour à tous,
    J'ai un script HTML / javascript (jquery) qui fonctionne très bien, voici la fonction en question (elle fonctionne) :
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function connect() {	
    	var formData =  '{"user": "username","password": "xxxxxx"}' ;
    	$.ajax({
    		  type: "POST",
    		  url: "http://monsiteweb.com/blablabla",
    		  data: formData,
    		  success: function(txt){  alert( 'REPONSE OK : ' + JSON.stringify(txt)) ;},
    		  error: function(txt){ alert( 'ERR : ' +JSON.stringify(txt));},
    		  dataType: "json",
    		  contentType : "application/json",
    		});
    }

    Ce script passe des données au format json, et récupère un json .

    Je voudrait maintenant reproduire la même chose dans mon programme Lazarus.
    J'ai essayé avec TFPHTTPClient, mais sans succès. Est-ce que quelqu'un a une idée pour traduire le code ci dessus ?
    Je précise que je n'ai pas la main sur le site web en question, mais je sais que le code jquery ci-dessus fonctionne .

    Voici le genre de choses que j'ai essayé, sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      http := TFPHTTPClient.Create(self);
      http.AllowRedirect := False;
      http.AddHeader('dataType', 'json');
      http.AddHeader('Content-Type', 'application/json');
      memo1.Text := http.FormPost('http://monsiteweb.com/blablabla', '{"user": "username","password": "xxxxxx"}' );
      http.Free;
    Par avance merci!
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut, pour récupérer tes données en JSon tu dois passer par un object TJSONData/TJSONObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    uses
      ..., fpjson, jsonparser
     
    var
      HTTPClient: TFPHTTPClient;
      jData : TJSONData;
      jObject : TJSONObject;
     
    begin
      HTTPClient:=TFPHTTPClient.Create(nil);
      jData := GetJSON(HTTPClient.FormPost('url',''));
      //jObject := TJSONArray(jData);
       ShowMessage(jData.FindPath('[0].user').AsString); // Methode courte si tu est sure de ta structure
    end;
    voir ce petit tuto sur le JSon

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Merci beaucoup pour ce retour, et de t’intéresser à mon problème !

    En fait, la ligne ci dessous me renvoi une chaine vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http.FormPost('http://monsiteweb.com/blablabla', '{"user": "username","password": "xxxxxx"}' );
    Donc le problème doit être dans la requête (encodage ? content-type ? formatage des paramètres ? )

    En javascript (voir le code posté ci-dessus), les éléments suivants sont importants, car ça ne fonctionne pas sans ces deux lignes :
    Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      dataType: "json",
      contentType : "application/json",

    J'ai essayé de transcrire ça sous Lazarus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      http.AddHeader('dataType', 'json');
      http.AddHeader('Content-Type', 'application/json');
    Mais sans succès...
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut petite question bête mais tu souhaites :
    - Recevoir les données depuis le post en Ajax ?
    - Ou envoyé ton formulaire depuis ton application vers ton site ?

    Si c'est la deuxième essayes :

    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
     
       http :=TFPHTTPClient.Create(nil);
       http.AllowRedirect := True;
    Try
     Try
        http.AddHeader('User-Agent','Mozilla/5.0 (compatible; fpweb)');
        http.AddHeader('dataType', 'json');
        http.AddHeader('Content-Type', 'application/json');
        Ret := http.FormPost('http://monsiteweb.com/blablabla', '{"user": "username","password": "xxxxxx"}' );
     Except
        on E: Exception do
        begin
          ShowMessage(E.ClassName + ' : ' + E.Message + ' --> '+Ret);
        end;
     End;
     Finally
       ShowMessage('Reponse = '+Ret);
       FreeAndNil(Http);
     End;
    Autres questions :
    - Quel est ton code PHP qui gère ton Post ? car je vois que dans ton code AJAX pour poster tes données, tu utilises JSON.stringify(txt) quelles sont les valeurs possible de retour dans ta variable "txt" ? c'est une structure JSON aussi ? genre {result:SUCCESS} en cas de succès ?
    - Tu testes sur un serveur local ou distant ? si c'est distant ta connexion doit peut-être nécessiter une connexion SSL (https).

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Pour répondre à tes questions :
    - La données récupérée en ajax (en cas de succès) est effectivement au format JSON.
    - Mon code est un formulaire HTML / javascript (jQuery) pur, il n'y a pas de PHP.
    - le site web est distant (et je ne le maitrise pas)

    Pour expliquer (en simplifiant) mon problème : actuellement j'ai un formulaire web statique (HTML / javascript) qui fonctionne bien (et qui réalise toute une série de tâche via des scripts javascript). L'idée serait d'intégrer cette partie dans une application Lazarus existante.

    Je viens de tester ton code, et j'ai une exception :
    EInOutError : Could not initialize OpenSSL library -->
    Donc je pense que tu as vu juste du coté de SSL.
    Dans le formulaire web je n'utilise pas ces notions, c'est probablement le navigateur qui s'en charge.
    Comment intégrer une connexion SSL dans un programme Lazarus ?

    Encore merci pour ton aide !
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  6. #6
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Grace à tes pistes, j'ai rechercher un peu via notre ami Google et j'ai trouvé une solution qui semble fonctionner (il faut que j'approfondisse).
    J'utilise TidHTTP (indy) et les dll SSL fournie, à la place de TFPHTTPClient, et j'arrive à récupérer mon JSON

    Pour ceux qui tomberont sur ce post et que ça intéresse, un extrait du code que j'utilise et qui fonctionne dans mon cas (il fallait également ajouter l'encodage UTF-8 qui posait problème) :
    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
      HTTP := TIdHTTP.Create;
      try
        try
          RequestBody := TStringStream.Create(UTF8Encode('{"user": "username","password": "xxxxxx"}')) ;
          try
            HTTP.Request.Accept := 'application/json';
            HTTP.Request.ContentType := 'application/json';
            HTTP.Request.CharSet:= 'utf-8';
            ResponseBody := HTTP.Post('http://monsiteweb.com/blablabla', RequestBody);
            jData := GetJSON(  ResponseBody );
            {
    		Traitement du JSON récupéré
    	}
          finally
            RequestBody.Free;
          end;
        except
          on E: EIdHTTPProtocolException do
          begin
            Showmessage(E.Message);
            Showmessage(E.ErrorMessage);
          end;
          on E: Exception do
          begin
            Showmessage(E.Message);
          end;
        end;
      finally
        HTTP.Free;
      end;
    Merci beaucoup pour ton aide!
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  7. #7
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut, de rien
    Je me doutais fortement que c'était a cause de SSL,
    Quelle version de Lazarus utilises tu ?
    Car je sais qu'il y avait un bug avec HTPPClient et SSL dans la version 1.6x ou 1.8x et depuis je ne sais pas si le bug à été résolue...ou pas.
    Et oui, effectivement pour que cela fonctionne il faut installer la bibliothèque OpenSSL sur son environnement.

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sat83 Voir le message
    Pour répondre à tes questions :
    - La données récupérée en ajax (en cas de succès) est effectivement au format JSON.
    - Mon code est un formulaire HTML / javascript (jQuery) pur, il n'y a pas de PHP.
    - le site web est distant (et je ne le maitrise pas)

    Pour expliquer (en simplifiant) mon problème : actuellement j'ai un formulaire web statique (HTML / javascript) qui fonctionne bien (et qui réalise toute une série de tâche via des scripts javascript). L'idée serait d'intégrer cette partie dans une application Lazarus existante.
    Juste une petite remarque pour la connexion tu devrais passer par un script PHP car le faire en direct en Javascript, ce n'est sécurisé du tout, suffit juste d'inspecter la page de ton site pour connaitre les logins/mot de passe ou pour "by-passer" la connexion et hop, n'importe qui peux accéder à ton site. Un script PHP en "NO-SQL" est très simple à mettre en place

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

Discussions similaires

  1. [Lazarus] Traduction d'un code Delphi en Lazarus
    Par ApproxDev dans le forum Lazarus
    Réponses: 5
    Dernier message: 26/03/2017, 19h47
  2. traduction de code JQuery en WiQuery
    Par zaboug dans le forum Wicket
    Réponses: 0
    Dernier message: 18/05/2011, 15h01
  3. aide traduction code javascript
    Par calitom dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 10/10/2007, 20h39
  4. Découper un code HTML qui demande un post vers PHP
    Par Liondd dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2006, 03h15

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