|
Body pour httRequête : voici comment faire |
Iniciado por DavDes, 18,jul. 2020 00:33 - 14 respuestas |
| |
| | | |
|
| |
Miembro registrado 14 mensajes Popularité : +2 (6 votes) |
|
Publicado el 18,julio 2020 - 00:33 |
Bonjour,
Vous êtes tombé sur la cas où vous auriez besoin de mettre des clés dans la section Body d'une requête. Vous avez réussi dans Postman :
Évidemment vous avez tout tenté dans WinDev avec Contenu, mais ça ne fonctionne pas ...
Voici comment faire :
cMaRequete est une httpRequête cMaréponse est une httpRéponse
cMaRequete..URL = "https://login.xxxxxxxx/oauth2/v2.0/token" cMaRequete..ContentType = "multipart/form-data" cMaRequete..Méthode = httpPost HTTPCréeFormulaire("Token") HTTPAjouteParamètre("Token","grant_type","client_credentials") HTTPAjouteParamètre("Token","client_id","94xxxxxxxe4") HTTPAjouteParamètre("Token","client_secret","8dxxxip") HTTPAjouteParamètre("Token","scope","https://xxxxxefault") HTTPAjouteParamètre("Token","client_authentication","Send as basic Auth Header") cMaréponse=HTTPEnvoieFormulaire("Token",cMaRequete)
Info(cMaréponse.Contenu)
Et voici le résultat :
Bons tests ! |
| |
| |
| | | |
|
| | |
| |
Publicado el 17,diciembre 2020 - 07:28 |
Bonjour mon developper DavDes, merci beaucoup pour ce bout de code !
Seulement je veux faire la meme chose sur windev mobile 25, ça ne marche pas.
Le même code marche ent windev mais pas en Windev mobile |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 21 mensajes |
|
Publicado el 22,mayo 2021 - 09:49 |
Merci DavDes. Je confirme que c'est effectivement la solution pour passer des variables de type form-data dans le body. |
| |
| |
| | | |
|
| | |
| |
Publicado el 02,diciembre 2021 - 14:46 |
Merci infiniment pour ce post, qui devrait être sans doute ajouté à la doc Windev. J'ai passé plusieurs heures à tourner en rond avant de trouver la solution grace à vous. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 10 mensajes Popularité : +3 (3 votes) |
|
Publicado el 21,diciembre 2021 - 17:23 |
Un grand merci @DavDes, je bloquais sur le problème depuis le début de la semaine Ne pouvant pas utiliser HTTPEnvoie() (car ne passe pas à travers le proxy chez un client (pourquoi ?)), on devait passer par les formulaires, et je suis resté bête sur le fait qu'ils ne prennent pas en compte mon req..Contenu
Bonnes fêtes et bonne année à tous ! |
| |
| |
| | | |
|
| | |
| |
Publicado el 04,febrero 2022 - 09:41 |
Bonjour,
merci pour ce bout de code.
Seul soucis, je me tape un time out de 20s quoique je fasse. Je met un httpTimeOut() de 10 minutes, l'info m'indique bien 600 000ms mais j'ai tout de même une erreur détectée au bout de 20 sec.
J'ai installé l'administrateur Webdev, j'ai changé la configuration en passant "durée maximum d'une requêteé à 9 minutes mais ça ne change rien.
Si quelqu'un à une idée je suis preneur.
Bonne journée |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 14 mensajes Popularité : +2 (6 votes) |
|
Publicado el 03,marzo 2022 - 00:31 |
Avez-vous essayé votre requête dans Postman ? Parce que le TimeOut peut aussi venir du serveur. Si le fichier est trop gros par exemple (parce que je me dis que 10mn pour envoyer un fichier, c'est clair que ce n'est pas un .CSV de 100Ko) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 386 mensajes Popularité : +13 (13 votes) |
|
Publicado el 03,marzo 2022 - 09:08 |
Bonjour,
Les variables de type httpRequête ont deux attributs propres pour gérer cela : - httpReq.TimeoutConnexion : sert à gérer l'attente côté serveur : typiquement on a réussi à envoyer les données, et le serveur les utilise dans des traitements avec qui l'empêche de répondre rapidement. - httpReq.DuréeNonRéponse : sert à gérer le temps nécessaire pour l'envoi des données. Souvent nécessaire lorsqu'on cherche à envoyer une quantité de données non-négligeable (upload de fichiers, etc)
Documentation : https://doc.pcsoft.fr/fr-FR/?1000021158&name=httprequete_type_variable
En ajustant ces deux variables vous devriez arriver à résoudre votre problème. |
| |
| |
| | | |
|
| | |
| |
Publicado el 03,marzo 2022 - 13:58 |
bien vérifier que tu utilise le mode post qui est prévu pour les envois de grande taille. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 324 mensajes Popularité : +21 (51 votes) |
|
Publicado el 03,marzo 2022 - 16:17 |
HTTPCréeFormulaire("Token") < c'est juste la base du web ce truc ...
C'est pas méchant mais je trouve fou le nombre de gens qui utilisent webdev sans rien connaitre du web ! Je sais pas le bon sens veut qu'on apprenne un minimum comment fonctionne quelques chose quand même !
bien vérifier que tu utilise le mode post qui est prévu pour les envois de grande taille. < "post, patch, put" rien à voir avec la taille du fichier ...
Merci infiniment pour ce post, qui devrait être sans doute ajouté à la doc Windev. J'ai passé plusieurs heures à tourner en rond avant de trouver la solution grace à vous.
Vous voulez ajouter quoi ? httpformulaire c'est un truc ultra standard, c'est au dev de savoir ce qu'il programme et pourquoi il le programme, ce n'est pas à PC Soft de vous indiquer dans "l'aide" une des 377 000 manière d'utiliser l'envoi de formulaire ! |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 386 mensajes Popularité : +13 (13 votes) |
|
Publicado el 03,marzo 2022 - 17:39 |
C'est pas méchant mais très honnêtement c'est quand même faire preuve d'un certain élitisme
Déjà parce que ici c'est la section WinDev, et pour avoir eu des collègues dans ce cas, on peut très bien avoir 20 ans d'expérience en WinDev, avoir utilisé pleins de webservices SOAP (donc importés dans WinDev), des fonctions SAP dans tous les sens, et se retrouver comme des nues devant la demande de faire un appel HTTP plus "basique". En contrepartie j'ai bientôt près de 10 ans d'expérience en WebDev, on pourrait croire que ça se transpose relativement bien en WinDev et pourtant je me trouve comme un con quand un client me demande de communiquer avec un lecteur de carte magnétique sur port COM. A chacun ses connaissances mais aussi ses lacunes.
Quitte à râler il vaudrait mieux râler sur PC Soft directement. Leur communication est clairement axée "Développez avec le même langage sur plusieurs plateformes" et leurs outils tels que le bouton "Webiser" font qu'il est assez facile de croire que l'on peut faire du web aussi simplement que du WinDev.
Pour en revenir au sujet initial, il est aussi possible de se passer du HTTPFormulaire, mais il faut alors se coltiner soi-même l'encodage en form-data des paires de clés/valeurs.
Procedure TestFormulaireHTTP()
PROCEDURE INTERNE EncoderFormulaire(taValeursFormulaire est un tableau associatif de chaînes) : chaîne sRetour est une chaîne POUR TOUT sValeur, sNom de taValeursFormulaire sRetour += ["&"] + URLEncode(sNom,encodeURLDepuisUnicode) + "=" SI URLExtraitChemin(sValeur,urlProtocole) <> "" ALORS sRetour += URLEncode(URLEncode(sValeur, encodeURLDepuisUnicode),encodeURLParamètre) SINON sRetour += URLEncode(sValeur,encodeURLDepuisUnicode) FIN FIN RENVOYER sRetour FIN taValeurs est un tableau associatif de chaînes reqHTTP est une HTTPRequête resHTTP est une httpRéponse jsonContenu est un JSON
reqHTTP.URL = "https://httpbin.org/post" reqHTTP.Méthode = httpPost reqHTTP.Entête["accept"] = "application/json"
taValeurs["test"] = "test" taValeurs["origine"] = "Test WinDev 26" taValeurs["date_envoi"] = DateHeureSys()
reqHTTP.ContentType = typeMimeFormulaireSimple reqHTTP.Contenu = EncoderFormulaire(taValeurs)
resHTTP = reqHTTP.Envoie()
Trace(resHTTP.CodeEtat)
SI resHTTP.CodeEtat <> 200 ALORS RETOUR FIN
jsonContenu = resHTTP.Contenu
Trace(jsonContenu.form)
Par contre ça ne colle que pour les formulaires "simples". Si vous commencez à utiliser des HTTPAjouteFichier(), c'est encore une autre paire de manches... |
| |
| |
| | | |
|
| | |
| |
Publicado el 16,mayo 2022 - 16:50 |
bonjour et si on devait faire une requeute Get avec content /contenu , est ce possible? Merci à vous |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 386 mensajes Popularité : +13 (13 votes) |
|
Publicado el 16,mayo 2022 - 18:26 |
Bonjour,
En règle générale, PC Soft suit les standards RFC, et ceux-ci indiquent qu'en GET le contenu, bien qu'autorisé, ne devrait pas utilisé. Par défaut donc il n'est pas possible d'envoyer de contenu avec un GET en Wlangage.
Il y aurait peut-être (avec un GROS conditionnel, je n'ai pas testé) une solution de contournement similaire à ce que PC Soft a proposé pour le verbe DELETE (lui aussi ne devrait pas avoir de contenu) avec l'appel à HTTPEnvoieFormulaire() : https://blogs.pcsoft.fr/fr/utilisation-api-rest-contenu-ignore-lorsque-methode-http-delete/281474976710938/read.awp
Si cela ne marche pas ou ne convient pas, il ne reste pas 36 solutions : - utiliser un outil comme curl en ligne de commande avec des appels à LanceAppli(). - descendre d'un niveau (en C# ou Python pour WinDev par exemple) et développer ses propres fonctions HTTP à partir de là |
| |
| |
| | | |
|
| | |
| |
Publicado el 17,mayo 2022 - 21:20 |
| |
| |
| | | |
|
| | |
| |
Publicado el 17,agosto 2022 - 10:43 |
Bonjour,
je dois faire appel à un web service rest et envoyer dans le body un fichier json.
Quand j'essaye avec le ..contenu , cela ne focntionne pas.
Auriez vous un exemple de comment alimenter le body d'une requette http avec un fichier json ( en passant par un buffer ) ?
Par avance, merci et bonne journée à tous.
Jean-Christophe |
| |
| |
| | | |
|
| | | | |
| | |
|