PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → HTTPEnvoieFormulaire : resultat différent si configuration ios ou android
HTTPEnvoieFormulaire : resultat différent si configuration ios ou android
Débuté par The Gillou, 24 oct. 2018 21:29 - 7 réponses
Posté le 24 octobre 2018 - 21:29
Bonsoir à tous,

J'essaie d'utiliser l'exemple d'accès à Amazon S3 fourni dans la LST 88. Celui-ci est en windev et j'essaie de l'adapter à windev mobile. Tout fonctionne bien, à part le téléchargement de fichier... et encore : en configuration IOS ca marche bien, mais c'est en mode androïd que mon appel ne passe plus. J'ai bien essayé de déclarer mon projet en unicode, avec toutes mes chaines en ANSI, et l'inverse, et je pense toute combinaison possible de type de chaine mais rien n'y fait...

Quelqu'un a t'il réussi à mettre en place cet exemple pour Android, ou avez-vous une idée de ce qui pourrait être mauvais dans mon code ?

Merci beaucoup par avance de toute piste.


Procedure S3FichierRecupère(sSource est une chaîne , sDestination est une chaîne , sNomBucket est une chaîne , sIdentifiantS3 est une chaîne , sCléS3 est une chaîne )



dhRequete est un DateHeure=DateSys+HeureSys

sDateRFC est une chaîne = DateVersChaîne(dhRequete,maskDateEmail)

sURL est une chaîne = AWS_PROTOCOLE+AWS_URL_BASE+"/"+sSource

sChaineASigner est une chaîne = "GET"+Caract(10)+Caract(10)+"application/x-www-form-urlencoded"+Caract(10)+sDateRFC+Caract(10)+"/"+sNomBucket+"/"+sSource

sSignature est une chaîne = HashChaîne(HA_HMAC_SHA_160,ChaîneVersUTF8(sChaineASigner),ChaîneVersUTF8(sCléS3))
sSignatureBase64 est une chaîne = Crypte(sSignature,"",crypteAucun,encodeBASE64)
sSignature= sSignatureBase64


sEntetesHTTP est une chaîne = ChaîneConstruit([
Host: %4
Date: %1
Authorization: AWS %2:%3
],sDateRFC,sIdentifiantS3,sSignature,sNomBucket+"."+AWS_URL_BASE)



HTTPCréeFormulaire("AmazonGET")
HTTPEnvoieFormulaire("AmazonGET",sURL, httpGet,AWS_USER_AGENT,sEntetesHTTP)

// Lecture de la réponse
sEntete est une chaîne = HTTPDonneRésultat(httpEntête)
sReponse est une chaîne = HTTPDonneRésultat(httpRésultat)

fSauveTexte(sDestination,sReponse)
Posté le 25 octobre 2018 - 21:59
D'après moi le problème vient de la fonction crypte qui n'est plus conseillé d'utiliser.
Essaye avec cela :
http://doc.pcsoft.fr/?1000021293
Posté le 26 octobre 2018 - 15:57
popoy a écrit :
D'après moi le problème vient de la fonction crypte qui n'est plus conseillé d'utiliser.
Essaye avec cela :
http://doc.pcsoft.fr/?1000021293


Merci de ta réponse, hélas même résultat. J'ai tout de même du mal à comprendre que sEntetesHTTP soit de même valeur entre IOS et Android et que seul un des deux ne fonctionne...
Posté le 28 octobre 2018 - 10:43
Es tu sur que la valeur est identique entre iOS et Android ?
Fait un info ou un toast avant et après l'envoi de la requête sur le site.
D'après moi il y a obligatoirement une différence.
Sinon tu aurais le même résultat.
Peut-être du à des caractères Ansi , unicode ou utf8.
Posté le 28 octobre 2018 - 19:07
popoy a écrit :
Es tu sur que la valeur est identique entre iOS et Android ?
Fait un info ou un toast avant et après l'envoi de la requête sur le site.
D'après moi il y a obligatoirement une différence.
Sinon tu aurais le même résultat.
Peut-être du à des caractères Ansi , unicode ou utf8.


J'ai fini par trouver, en essayant des choses au pif à vrai dire :
Cela fonctionne si le type mime est chaine vide.
Pour que cela fonctionne correctement sur IOS il faut laisser la ligne suivante telle quelle (le type mime est obligatoire) :
sChaineASigner="GET"+Caract(10)+Caract(10)+"application/x-www-form-urlencoded"+Caract(10)+sDateRFC+Caract(10)+"/"+sNomBucket+"/"+sSource

Mais sous androïd, ne pas spécifier le type mime :
sChaineASigner= "GET"+Caract(10)+Caract(10)+Caract(10)+sDateRFC+Caract(10)+"/"+sNomBucket+"/"+sSource


Aucune idée du pourquoi (je n'ai pas trouvé dans la doc de S3 qu'il faille faire une diférence selon la plateforme) mais ouf ça marche...
Merci encore de ton aide Popoy, et j'espère que la solution pourra peut-être aider quelqu'un.
Posté le 29 octobre 2018 - 15:32
Franchement, j'aurais jamais trouver.
je garde la page dans mes favori
Posté le 01 août 2019 - 17:16
Bonjour The Gillou

Je n'ai pas la LST en question
Peux tu juste m'indiquer à quoi correspond :
AWS_PROTOCOLE
AWS_URL_BASE
AWS_USER_AGENT

Merci d'avance
Christian
Posté le 02 août 2019 - 14:26
Résolu
A définir comme constantes comme dans la LST
Fonctionne
Christian