Bonjour!
J'utilise depuis un bout de temps un service web pour le téléchargement de fichiers. En gros mon appli se connecte au service web, appelle une fonction passant des paramètres et une structure comportant entre autre un tableau d'octets (TByteDynArray) m'est retourtée. Je transfère alors le tableau d'octets dans un fichier via un objet TFileStream et tout fonctionne parfaitement.
Le problème est que cette méthode ne fonctionne pas depuis peu chez certains de mes clients. Après diagnostic, je sais que c'est l'accès au service web par Delphi qui fait défaut. J'ai testé avec une appli de test montée en VB.NET et ça fonctionne parfaitement sur les machines qui plantent avec mon appli Delphi. Sachez tout de suite que ma question n'est pas de savoir comment régler ce problème alors vous pouvez continuer à lire les petits amis.
Après quelques tests, j'ai décidé de contourner le problème en construisant moi même un proxy qui se connecte au Service Web en question. C'est pas très compliqué : Un TidHTTP qui exécute un post avec mes paramètres et qui met la réponce dans un TXMLDocument. Je parcours les Nodes, cherche celle de mon tableau d'octets et jusque là tout fonctionne très bien.
Mon problème (voilà j'y arrive!) est que mon tableau est stocké en format Base64 (c'est normal, c'est le principe même des services web que de sérialiser les objets pour que ça passe sur le port 80 sans faire crier les Firewalls). J'ai essayé de décoder le résultat de ma Node via une méthode que j'ai trouvé sur le net mais cette dernière me retourne plus d'octets qu'elle ne le devrait (19 091 312 contre 18 843 373 en mode normal) ce qui me fait comprendre que je fais peut-être quelque chose qu'il ne faudrait pas.
Donc (enfin!) j'ai 3 questions :
- Quelqu'un sait comment THTTPRIO fait pour décoder le Base64 (question que je tente de l'imiter) ?
- Existe-t-il une méthode native à Delphi (INDY ou autre) qui peut m'aider à décoder du Base64 ? (c'est peut-être ma fonction trouvée sur le net qui fait défaut)
- Quelqu'un a une autre idée à me proposer ?
Merci!!
Partager