PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Comment exécuter une commande CURL?
Comment exécuter une commande CURL?
Débuté par Nicolas ROBIN, 25 mar. 2020 09:45 - 5 réponses
Membre enregistré
87 messages
Posté le 25 mars 2020 - 09:45
Bonjour,

Quelqu'un saurait-il par quel moyen je pourrais exécuter une commande CURL en Windev et comment récupérer la réponse retournée?

Ce que je souhaiterais faire serait avec une commande Curl de ce type:

curl –k –H "content-type :application/x-www-form-urlencoded" –d "grant_type=client_credentials&client_id=XXXXX&client_secret=XXXXXXX&scope=openid" –X POST https://sandbox-oauth.aife.economie.gouv.fr/api/oauth/token


Cordialement,

--

NR
Membre enregistré
35 messages
Posté le 25 mars 2020 - 13:23
Salut

Je viens de terminer un problème avec une commance curl à traduire en erbdev dans mon cas alors je me permet de traduire la tienne. Je ne garantie pas le fonctionnement à 100% mais tu ne devrais pas être loin de la réponse finale.

Commence en utilisant ce code :
MaHttp est une httpRequête
cMaReponse est un httpRéponse

Data est une structure
grant_type est une chaîne
client_id est une chaîne
client_secret est une chaîne
scope est une chaîne
FIN

sDataJSON est une chaîne
stDataStructure est un Data

stDataStructure:grant_type = "client_credential"
stDataStructure:client_id = "XXXXX"
stDataStructure:client_secret = "XXXXXXX"
stDataStructure:scope = "openid"
Sérialise(stDataStructure, sDataJSON, psdJSON)

MaHttp.Méthode = httpPost
MaHttp.Entête["Content-Type"] = "application/x-www-form-urlencoded"
MaHttp.URL = "https://sandbox-oauth.aife.economie.gouv.fr/api/oauth/token"
MaHttp.Contenu = sDataJSON

cMaReponse = HTTPEnvoie(MaHttp)
SI ErreurDétectée ALORS
Trace("Erreur" + RC + ErreurInfo(errComplet))
SINON
Trace(cMaReponse..Contenu)
FIN


Bonne chance pour la suite :)

PS Le forum pourrait t'aider si tu fais quelques recherche pour finaliser le tout, et l'aide sur la définition des types de variables httprequete et httpreponse. Pour ma part, j'ai trouvé la solution avec quelques recherches dans le forum et l'aide en ligne.

--
André Marquis
Concept Info Web
www.concept-infoweb.net
Membre enregistré
87 messages
Posté le 25 mars 2020 - 14:14
Merci Andre pour ta réponse.

J'ai trouvé une solution différente qui fonctionne mais j'aime bien ta façon de faire.
Je la trouve plus clair que la mienne.

J'ai traduit la commande CURL suivante:
curl –k –H "content-type :application/x-www-form-urlencoded" –d "grant_type=client_credentials&client_id=XXXXX&client_secret=XXXXXXX&scope=openid" –X POST https://sandbox-oauth.aife.economie.gouv.fr/api/oauth/token



Ainsi:
FONCTION Donne_Token(LOCAL psClient_id est une chaîne,LOCAL psClient_secret est une chaîne,LOCAL psToken_Url est une chaîne,pstToken est un ST_structure___TOKEN)

//-----------------------------------------------------------------------------------------
//Liste des URL PISTE pour accéder aux API CPRO
//-----------------------------------------------------------------------------------------
//Nom d’accès | URL | Type d’accès
//-----------------------------------------------------------------------------------------
//INTERNET https://sandbox-api.aife.economie.gouv.fr Consommation
//INTERNET https://api.aife.economie.gouv.fr Consommation
//INTERNET https://developer.aife.economie.gouv.fr Consommation
//INTERNET https://sandbox-oauth.aife.economie.gouv.fr Obtention d’un jeton
//INTERNET https://oauth.aife.economie.gouv.fr Obtention d’un jeton
//ADER https://api.aife.finances.rie.gouv.fr Consommation
//ADER https://oauth.aife.finances.rie.gouv.fr Obtention d’un jeton
//ADER https://sandbox-api.aife.finances.rie.gouv.fr Consommation
//ADER https://sandbox-oauth.aife.finances.rie.gouv.fr Obtention d’un jeton
//-----------------------------------------------------------------------------------------


//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Récupération de l’access Token pour procéder à un appel API Chorus Pro en mode Oauth2 avec la commande Curl
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Depuis INTERNET:
//curl –k –H "content-type :application/x-www-form-urlencoded" –d "grant_type=client_credentials&client_id=XXXXX&client_secret=XXXXXXX&scope=openid" –X POST https://sandbox-oauth.aife.economie.gouv.fr/api/oauth/token

//Depuis le Réseau Interministériel de l'État (RIE):
//curl –k –H "content-type :application/x-www-form-urlencoded" –d "grant_type=client_credentials&client_id=XXXXX&client_secret=XXXXXXX&scope=openid" –X POST https://sandbox-oauth.aife.finances.rie.gouv.fr/api/oauth/token
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sRESULTAT_CleToken est une chaîne
stRESULTAT_Token est un ST_structure___TOKEN

http_REQ est une httpRequest
http_REP est une httpResponse
//vDonnees_REP est un variant

bufJson_SORTIE est un Buffer

bErreur est un booléen
sMsg_Err est une chaîne

//On regarde si le token est encore valide pour ne pas en redemander un inutilement
//Si la validité du token a expirée, on en redemande un
SI TOKEN_Valide(pstToken) ALORS
stRESULTAT_Token =pstToken
sRESULTAT_CleToken =stRESULTAT_Token.access_token
SINON
http_REQ..Method =httpPost
http_REQ..URL =psToken_Url
http_REQ..User =psClient_id
http_REQ..Password =psClient_secret
http_REQ..ContentType ="application/x-www-form-urlencoded"
http_REQ..Content =ChaîneVersUTF8(ChaîneConstruit("grant_type=client_credentials&client_id=%1&client_secret=%2&scope=openid",psClient_id,psClient_secret))
http_REP =HTTPEnvoie(http_REQ)
SI ErreurDétectée ALORS
bErreur =Vrai
// sMsg_Err =ErreurInfo(errComplet)
sMsg_Err ="Erreur durant la récupération du Token d'authentification CHORUS."+RC+RC+ErreurInfo(errMessage)
sRESULTAT_CleToken =""
SINON
bufJson_SORTIE =http_REP..Contenu
// vDonnees_REP =JSONVersVariant(bufJson_SORTIE)
SI Deserialise_JSON(bufJson_SORTIE,stRESULTAT_Token) ALORS
//On contrôle la validité du token récupéré
SI TOKEN_Valide(stRESULTAT_Token) ALORS
sRESULTAT_CleToken =stRESULTAT_Token.access_token
SINON
bErreur =Vrai
sMsg_Err ="Erreur durant la récupération du Token d'authentification CHORUS."
sRESULTAT_CleToken =""
FIN
FIN
FIN

SI bErreur ALORS
sRESULTAT_CleToken =""
Erreur(sMsg_Err)
FIN
FIN

RENVOYER (stRESULTAT_Token,sRESULTAT_CleToken)



PROCEDURE INTERNE TOKEN_Valide(LOCAL pstToken_TMP est un ST_structure___TOKEN)
bToken_Valide est un booléen
dh est une DateHeure
dh_Validite_DBT est une DateHeure
dh_Validite_FIN est une DateHeure
du_Validite_DUREE est une Durée

//On regarde si le token est encore valide pour ne pas en redemander un inutilement
dh =DateHeureSys
SI pstToken_TMP.access_token<>"" ALORS
SI DateHeureValide(pstToken_TMP.DateHeure_RecupToken) ALORS
dh_Validite_DBT =pstToken_TMP.DateHeure_RecupToken
du_Validite_DUREE..EnSecondes =pstToken_TMP.expires_in
dh_Validite_FIN =dh_Validite_DBT+du_Validite_DUREE

SI dh<dh_Validite_FIN ALORS
bToken_Valide =Vrai
FIN
FIN
FIN
RENVOYER bToken_Valide
FIN


--

NR
Membre enregistré
11 messages
Posté le 17 avril 2020 - 18:59
Merci Nicolas ROBIN,
J'étais confronté à un problème d'OAuth / GetToken qui fonctionnait avec SOAPui mais pas en WinDev...
Votre code ma inspiré avec succès.
Le point déterminant pour moi réside dans le fait de NE PAS envoyer de header d'autentification Basic [user]:[pass] en base 64 mais de spécifier dans le contenu "&client_id=[user]&client_secret=[pass]"
Merci !
Membre enregistré
4 messages
Posté le 17 juin 2020 - 12:57
Bonjour tout le monde,
Je ne sais pas si je poste ceci au bonne endroit mais j'ai un probléme un peu similaire et je recherche un pro qui puisse m'aider à retranscrire la commande CURL suivante en W langage (winDev 24) pour obtenir ce résultat dans une chaine. Merci toute aide me sera trés précieuse :

curl -k https://eh-digitalsolutions.atlassian.net/rest/api/latest/configuration --user <Login>:<MDP>

Voici la réponse obtenue que je cherche à obtenir:

{"votingEnabled":true,"watchingEnabled":true,"unassignedIssuesAllowed":true,"subTasksEnabled":true,"issueLinkingEnabled":true,"timeTrackingEnabled":true,"attachmentsEnabled":true,"timeTrackingConfiguration":{"workingHoursPerDay":8.0,"workingDaysPerWeek":5.0,"timeFormat":"hours","defaultUnit":"hour"}}

Merci encore pour toutes vos réponses

PS: J'ai essayé un tat de chose avec Httpxxx sans résultats

Cordialement
Membre enregistré
953 messages
Posté le 17 juin 2020 - 14:18
bonjour COJE,

quel code avez vous testé ?
car je pense que le simple code suivant doit fonctionner :

_rest_request est un restRequest
_rest_result est un restResponse

_rest_request.URL="https://eh-digitalsolutions.atlassian.net/rest/api/latest/configuration"
_rest_request.Utilisateur="toto"
_rest_request.MotDePasse="tata"

_rest_result=RESTEnvoie(_rest_request)
SI PAS ErreurDétectée ALORS
Info(_rest_result..CodeEtat,_rest_result..Contenu)
FIN


Mais à première vue, Atlassian n'autorise plus l'authentification en mode basic, vous devrez changer de méthode d'authentification en passant par les API Tokens :
https://confluence.atlassian.com/cloud/deprecation-of-basic-authentication-with-passwords-for-jira-and-confluence-apis-972355348.html

bon dèv