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 :

Indy POST REST et contenu complet de requête


Sujet :

Web & réseau Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 137
    Points : 2 815
    Points
    2 815
    Par défaut Indy POST REST et contenu complet de requête
    Bonjour tou(te)s

    Je coince sur un appel REST en POST sur un site pour lequel j'obtiens toujours une réponse disant qu'il ne trouve pas les paramètres nécessaires dans le header.
    Avec le composant TdHttp, est-ce qu'il y aurait un moyen de voir le contenu réellement envoyé au moment du IdHTTP1.Post( ...) ppur que j'essaye de comprendre ce qui coince ??

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 232
    Points : 21 578
    Points
    21 578
    Par défaut
    PostMan ou RestDebuger permettrait de concevoir la requête, la faire fonctionner ensuite la traduire en Delphi.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 232
    Points : 26 662
    Points
    26 662
    Par défaut
    généralement j'utilise un script PHP pour afficher tout cela

    au lieu d'envoyer ta requête sur le service en question, tu l'envoies sur un serveur à toi et tu regardes la requête

    NB: tu peux le faire aussi avec TidHTTPServer mais comme je bosse aussi pas mal en PHP j'ai toujours un serveur Apache sous la main pour des tests rapides
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 137
    Points : 2 815
    Points
    2 815
    Par défaut
    Avec Postman ça fonctionne.
    Avec le debugger REST de Delphi, rien à faire !

    Le site étant sur AWS, difficile de tester autrement.

    Sauf si Postman peut montrer exactement ce qu'il envoie à partir des paramètres fournis.
    Mais là, je n'ai pas vu s'il pouvait faire ça.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 232
    Points : 21 578
    Points
    21 578
    Par défaut
    Postman, il fourni toute la requête, c'est fait pour cela !
    Et peu probable que tu fasses ton code Delphi si même en RestDebuger, l'appel est incomplet

    Qu'elle est exception ?
    Quel encodage ? Text, UTF8, binaire ...
    HTTP, HTTPS ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre émérite Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 1 123
    Points : 2 378
    Points
    2 378
    Par défaut
    Il y a eu plusieurs anomalies au niveau des entêtes http transmis par les composants TRESTClient et TRESTRequest selon la version de Delphi utilisée.

    REST Debugger en fait aussi les frais sur la version 10.4.2 Sydney.

    L'utilisation des composants THTTPClient et THTTPRequest (ou de la classe sous-jacente) permet de contourner le problème.

    Concernant TIDHTTP il faut effectivement contrôler ce qui est envoyer pour s'assurer d'où vient le problème (remplissage des paramètres, envoi des paramètres, réception, ...)

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 137
    Points : 2 815
    Points
    2 815
    Par défaut
    alors, j'ai fini par trouver ... enfin presque

    J'ai remplacé RESTRequest1.AddParameter avec le paramètre qui va bien
    par RESTRequest1.Params.AddItem pour le body
    par RESTRequest1.Params.AddHeader pour le header

    et là , magie, ça fonctionne.

    Tous les exemples que j'ai trouvé sur le web utilisent pourtant AddParameter.
    Il faudra que je cherche les différences entre ces fonctions mais j'imagine que le RESTDebuger utilise les mauvaises fonctions puisqu'il plante lamentablement.

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 232
    Points : 21 578
    Points
    21 578
    Par défaut
    AddParameter en jouant sur pkGETorPOST et pkHTTPHEADER devrait aussi fonctionner puisque AddHeader c'est juste un AddItem en pkHTTPHEADER
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    3 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 3 137
    Points : 2 815
    Points
    2 815
    Par défaut
    Je suis bien d'accord, ça devrait fonctionner. Sauf que .... non !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //    RESTRequest1.AddParameter('Database', PostGED.Database, TRESTRequestParameterKind.pkHTTPHEADER);
        RESTRequest1.Params.AddHeader('Database', PostGED.Database);
    Le AddParameter ne doit pas faire la même chose puisque le AddHeader rend ma requête correcte et me renvoie un code de succès.
    La ligne commentée envoie une requête pru laquelle le site n'arrive pas à retrouver le paramètre Database dans le Header.
    L'autre fonctionne.

    nouveau test pour confirmer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          RESTRequest1.AddParameter('Database', 'PostGED.Database', TRESTRequestParameterKind.pkHTTPHEADER);
    //      RESTRequest1.Params.AddHeader('Database', PostGED.Database);
    Project RepriseGED.exe raised exception class EHTTPProtocolException with message 'HTTP/1.1 500 Internal Server Error'.

    Si j'utilise AddHEader

    {"status":"success","data":{"

    Mais j'admets que le code Delphi semble bien faire la même chose. Je ne comprends pas

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/05/2007, 10h49
  2. Indy Post > MultiPartFormDataStream
    Par etnoig dans le forum Delphi
    Réponses: 2
    Dernier message: 19/02/2007, 12h52
  3. [XML] Créer un fichier sur le serveur avec le contenu d'une requête POST
    Par kingmandrax dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 27/10/2006, 00h18
  4. Remplir une ListView avec le contenu d'une requête
    Par callo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/10/2006, 08h44
  5. Comparer le contenu de deux requêtes
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2006, 11h43

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