|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
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)
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 |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 2018 - 15:57 |
popoy a écrit :
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 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|