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

WinDev Discussion :

RestEnvoie avec authtoken [WD20]


Sujet :

WinDev

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut RestEnvoie avec authtoken
    Rebonjour à tous,
    j'ai un problème avec l'envoie d'un enregistrement en JSON par webservice. Le fournisseur m'a donnée un token d'authentification. Un code vaut mieux que mille mots:
    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
    PROCEDURE EnvoieClientAuServeurEnLigne(UnClient)
     
    bufNewClient est une Buffer 
    vAlClient est un Variant
    wsRequete est une restRequête
    mReponse est une restRéponse
     
    valClient.Raison_Soc=UnClient
    bufNewClient=VariantVersJSON(vAlClient)
     
    wsRequete.URL="...../api/clients"
    wsRequete.Méthode=httpPost
    wsRequete.ContentType="application/json"
    wsRequete.Entête["AuthToken"]=api_token
    wsRequete.Contenu= bufNewClient
     
    mReponse=RESTEnvoie(wsRequete)
    SI ErreurDétectée ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	Info(mReponse.Contenu)
    FIN
    Une fois exécuté j'ai alors en retour:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8" />
            <meta http-equiv="refresh" content="0;url=urlFournisseur:8010/login" />
            <title>Redirecting to urlFournisseur/login</title>
        </head>
        <body>
            Redirecting to <a href="urlFournisseur/login">urlFournisseur:8010/login</a>.
        </body>
    </html>

    Je veux bien comprendre
    Autre chose, je ne trouve pas authToken dans windev20 lorsque je fais wsRequete.. est ce normale? quelle alternative me reste il?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Il te faudrait au moins être en 21 pour faire ce que tu veux faire : des variables httprequete / httpreponse.

    Face à ce souci, nous avons utilisé VBS au travers d'un objet ole automation.

    Un bout de code pour t'aiguiller, sachant que le cryptage est basé sur le nom+mdp
    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
    sAuthenBase64 est un buffer
     
    SI sUser <> "" ALORS
    	sAuthenBase64 = Crypte(sUser + ":" + sPassword,"",crypteAucun,encodeBASE64)
    FIN
     
    v_oau_Http est un objet Automation "Msxml2.ServerXMLHTTP"
    SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS est un entier = 13056
    v_oau_Http>>setOption(2) = 13056
    v_oau_Http>>open("POST", sUrl, False)
    v_oau_Http>>setRequestHeader("Content-type", "text/xml")
    v_oau_Http>>setRequestHeader("Content-Length", Taille(sContenuPost))
    SI sAuthenBase64 <> "" ALORS
    	v_oau_Http>>setRequestHeader("Authorization", "Basic " + sAuthenBase64)
    FIN
     
    POUR TOUT chn_Valeur, chn_Nom de pp_tab_EntetesSuppl
    	v_oau_Http>>setRequestHeader(chn_Nom, chn_Valeur)
    FIN
     
    SI v_oau_Http>>send(sContenuPost) = Vrai ALORS
    	sReponse est une chaîne = v_oau_Http>>ResponseText
    	RENVOYER sReponse
    FIN
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Dans ce cas pourquoi les fonctions restrequete/restreponse et autre httpRequete sont elles disponibles sous WD20? j'avoue que je suis dépassé. ET dans la documentation pcsoft dit que la version minimale c'est WD20 https://doc.pcsoft.fr/?1000021476 en bas de page et version mini pour fonction http c'est WD9 https://doc.pcsoft.fr/?3043004
    L'autre remarque c'est que dans mon cas, le fournisseur m'a juste donné un fichier contenant un token. Pas de login ni de mot de passe. Est ce le problème?

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Pour faire court, faire un httprequete va fonctionner pour un cas simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI HTTPRequête("http://www.perdu.com") ALORS
    	info(HTMLVersTexte(HTTPDonneRésultat(httpRésultat)))
    FIN
    La gestion des éléments (paramètres) supplémentaires, notamment de sécurité, n'est complètement implémentée (?) que depuis la V22.

    Dans ton cas, c'est normal que tu n'aies pas de user/mdp car il sont codés dans le token.

    Le code que je t'ai donné, est un exemple. Il faut l'adapter à ton cas...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    @frenchsting:
    je vois que dans ton exemple, c'est du xml que tu envoie, qu'en est il pour du JSON? Est ce le même objet automation?
    Autre chose, dans mon cas le fournisseur ne me donne pas de login/password. Je n'ai que le token (qui doit certainement les avoir en crypter, comme tu l'a dit)quel est pourrit être la manière idéale?

    Merci

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    1. Je pense que oui. A tester...
    2. Décortiquer les infos que tu peux trouver sur Msxml2.ServerXMLHTTP et les adapter à ton cas.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    @frenchsting: que represente pp_tab_EntetesSuppl et il n'est pas déclaré.

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Après plusieurs jours de lecture, j'ai due ajouter des paramètres supplémentaires arriver à mes faims:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    wsRequete.Entête["Accept"]="application/json"
    wsRequete.Entête["Accept-Charset"]="UTF-8"
    wsRequete.Entête["Content-Encoding"]="UTF-8"
    wsRequete.Entête["Authentification"]="API_Key"
    wsRequete.Entête["Key"]=api_Token
    Ainsi le code définitifs devient:
    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
     
    PROCEDURE EnvoieClientAuServeurEnLigne(UnClient)
     
    bufNewClient est une Buffer 
    vAlClient est un Variant
    wsRequete est une restRequête
    mReponse est une restRéponse
     
    valClient.Raison_Soc=UnClient
    bufNewClient=VariantVersJSON(vAlClient)
     wsRequete.Entête["Accept"]="application/json"
    wsRequete.Entête["Accept-Charset"]="UTF-8"
    wsRequete.Entête["Content-Encoding"]="UTF-8"
    wsRequete.Entête["Authentification"]="API_Key"
    wsRequete.Entête["Key"]=api_Token       // Contient le token du fournisseur
     
    wsRequete.URL="........./api/clients"
    wsRequete.Méthode=httpPost
    wsRequete.ContentType="application/json"
    wsRequete.Contenu= bufNewClient
     
    mReponse=RESTEnvoie(wsRequete)
    SI ErreurDétectée ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	Info(mReponse.Contenu)
    FIN

  9. #9
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par Le gris Voir le message
    @frenchsting: que represente pp_tab_EntetesSuppl et il n'est pas déclaré.
    Désolé pour le retard. C'est un tableau associatif contentant toutes les entêtes supplémentaires que tu dois ajouter...

    Mais, j'arrive trop tard et tu as réussi.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Désolé pour le retard. C'est un tableau associatif contentant toutes les entêtes supplémentaires que tu dois ajouter...
    Mais, j'arrive trop tard et tu as réussi.
    Je pense plutôt que ton code m'a été d'une utilité. Merci pour tout.

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Cela dit quand le jeton d'authentification est du type "Bearer Token", cela ne semble pas fonctiontionner:
    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
    PROCEDURE EnvoieClientAuServeurEnLigne(UnClient)
     
    bufNewClient est une Buffer 
    vAlClient est un Variant
    wsRequete est une restRequête
    mReponse est une restRéponse
     
    valClient.Raison_Soc=UnClient
    bufNewClient=VariantVersJSON(vAlClient)
     wsRequete.Entête["Accept"]="application/json"
    wsRequete.Entête["Accept-Charset"]="UTF-8"
    wsRequete.Entête["Content-Encoding"]="UTF-8"
    wsRequete.Entête["Authentification"]="Bearer" + api_Token
    wsRequete.URL="................./api/clients"
    wsRequete.Méthode=httpPost
    wsRequete.ContentType="application/json"
    wsRequete.Contenu= bufNewClient
     
    mReponse=RESTEnvoie(wsRequete)
    SI ErreurDétectée ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	Info(mReponse.Contenu)
    FIN
    L'on a comme réponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <httpRéponse> 
    	Contenu={"message":"Unauthenticated."} 
    	EntêteBrut="HTTP/1.1 401 Unauthorized<RC>
    	Server: nginx/1.14.1<RC>
    	Content-Type: application/json<RC>
    	Transfer-Encoding: chunked<RC>
    	Connection: keep-alive<RC>
    	Cache-Control: no-cache, private<RC>
    	Date: Tue, 23 Apr 2019 11:10:04 GMT<RC>X-RateLimit-Limit: 60<RC>X-RateLimit-Remaining: 59<RC><RC>" CodeEtat=401 DescriptionCodeEtat="Unauthorized" ContentType="application/json" Entête=
    Je cherches toujours pour cette autre partie.

  12. #12
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je ne connais pas la spécificité de ton Web Service, mais le mot Authentification me paraît bizarre. J'aurais plutôt écrit Authentication.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Je ne connais pas la spécificité de ton Web Service, mais le mot Authentification me paraît bizarre. J'aurais plutôt écrit Authentication.
    J'ai remplacer définitivement par Mais le problème était ailleurs:
    J'ai copier coller le contenu du fichier token dans ma variable api_Token qui est définie de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    api_token est une chaine = [
    kkljfdlkjdnhdkhfjgdbfdjgfhf... jdhdhuideiudhdieuheiuehff
    ]
    En fin de compte deux colonnes (Invisibles) de plus se sont ajouter sans qu'on se s'en rend compte. Ce qui a pour conséquence une altération du token et in-fine échec.
    Je resoud le problème en lisant directement le fichier de mon fournisseur et j'y extrait le token et le tour est joué.

    Que retient on en définitive: WD20 gère correctement les webservices à travers les RESTenvoie/RESTreponse et HTTPEnvoie/HTTPreponse RESTRequete/HTTPRequete. Il faut juste utiliser les bon paramètres et surtout les entêtes (Veillez à renseigner le maximum selon vos besoin).

    Un grand merci à
    Citation Envoyé par frenchsting Voir le message
    frenchsting
    pour son aide inestimable.

  14. #14
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    +1 à toi pour le retour
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

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

Discussions similaires

  1. [WD20] HTTPCertificat avec restEnvoi
    Par bruno.a dans le forum WinDev
    Réponses: 0
    Dernier message: 16/06/2016, 12h04
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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