Bonjour,
Je dois appeler un service web, avec passage de paramètres dans l'URL qui peuvent être en unicode.
Mes tests sont OK via Postman (je peux passer des caractères chinois et ça marche) par contre je suis un peu en galère pour faire fonctionner ce genre d'appel dans du RPG.
le HTTPOSTCLOB semble gérer l'URL en VARCHAR(2048), j'ai tenter de déclarer une variable avec un CCSID 1208 mais ça ne marche pas mieux.
J'ai tenté d'encoder l'URL via DB2XML.URLENCODE mais ça ne marche pas non plus (URLENCODE échoue).
Exemple d'URL :
http://serveur:port/contextpath/service?param=電子郵件標題
En résumé comment puis je gére cela svp ?
HTTPOSTCLOB & unicode
Re: HTTPOSTCLOB & unicode
Bonjour,
Le paramètre de la fonction est UTF8, il doit donc supporter cette URL.
Avez-vous un exemple du code utilisé ?
Une difficulté possible : stocker une URL UTF8 dans un fichier source EBCDIC par exemple ?
Est-ce que l'appel fonctionne via l'interpréteur SQL de ACS (il travaille en UTF8) ?
Remarque : il est préférable aujourd'hui d'utiliser QSYS2.HTTP_POST (https://www.ibm.com/docs/en/i/7.5?topic ... -post-blob)
Cordialement,
Le paramètre de la fonction est UTF8, il doit donc supporter cette URL.
Avez-vous un exemple du code utilisé ?
Une difficulté possible : stocker une URL UTF8 dans un fichier source EBCDIC par exemple ?
Est-ce que l'appel fonctionne via l'interpréteur SQL de ACS (il travaille en UTF8) ?
Remarque : il est préférable aujourd'hui d'utiliser QSYS2.HTTP_POST (https://www.ibm.com/docs/en/i/7.5?topic ... -post-blob)
Cordialement,
Nathanaël
-
- Messages : 11
- Enregistré le : jeu. 23 juil. 2020, 10:40:08
Re: HTTPOSTCLOB & unicode
Bonjour,
Finalement c'est bon, step by step j'y suis arrivé
- Déclarer les variables VARCHAR en CCSID 1208*
- Utiliser QSYS2.URL_ENCODE pour les parties d'URL à encoder (et pas toute l'URL sinon ça encode les :// derrière http, et là la fonction plante car elle ne reconnait pas le protocole)
Pourquoi est-il préférable d'utiliser QSYS2.HTTP_POST plutôt que SYSTOOLS.HTTPPOSTCLOB ?
Finalement c'est bon, step by step j'y suis arrivé
![Smile :)](./images/smilies/icon_smile.gif)
- Déclarer les variables VARCHAR en CCSID 1208*
- Utiliser QSYS2.URL_ENCODE pour les parties d'URL à encoder (et pas toute l'URL sinon ça encode les :// derrière http, et là la fonction plante car elle ne reconnait pas le protocole)
Pourquoi est-il préférable d'utiliser QSYS2.HTTP_POST plutôt que SYSTOOLS.HTTPPOSTCLOB ?
Re: HTTPOSTCLOB & unicode
Parfait !
Les fonctions de SYSTOOLS sont plus anciennes : l'implémentation est Java -> temps d'instanciation de la JVM au premier appel, mémoire nécessaire (pour la JVM déjà) ...
Les fonctions de QSYS2 sont implémentées via Axis, recompilé en natif (*SRVPGM), donc une empreinte mémoire bien moindre
Les fonctions de SYSTOOLS sont plus anciennes : l'implémentation est Java -> temps d'instanciation de la JVM au premier appel, mémoire nécessaire (pour la JVM déjà) ...
Les fonctions de QSYS2 sont implémentées via Axis, recompilé en natif (*SRVPGM), donc une empreinte mémoire bien moindre
Nathanaël
Re: HTTPOSTCLOB & unicode
Bonjour,
Pour gérer les paramètres en Unicode dans l'URL lors de l'appel à un service web en RPG, vous pouvez essayer les étapes suivantes :
Vérifiez l'encodage du programme RPG : Assurez-vous que l'encodage du programme RPG est défini correctement pour prendre en charge l'Unicode. Vous pouvez utiliser CCSID 1208 pour l'encodage Unicode UTF-8.
Utilisez une variable CLOB pour stocker l'URL : Au lieu d'utiliser une variable VARCHAR(2048), utilisez une variable de type CLOB pour stocker l'URL. Assurez-vous que la taille de la variable CLOB est suffisamment grande pour contenir l'URL complet.
Encodez l'URL correctement : Vous pouvez utiliser la fonction DB2URL.URLENCODE pour encoder correctement les paramètres de l'URL. Assurez-vous d'inclure les paramètres dans l'URL avant de l'encoder. Par exemple :
arduino
Copy code
URL = 'http://serveur:port/contextpath/service?param=' || DB2URL.URLENCODE('電子郵件標題');
Utilisez une fonction d'appel HTTP appropriée : Assurez-vous d'utiliser une fonction d'appel HTTP qui prend en charge les paramètres Unicode dans l'URL. Vérifiez la documentation de votre environnement de développement RPG pour trouver une fonction d'appel HTTP appropriée. Vous pouvez également consulter des exemples de code ou des tutoriels spécifiques à votre environnement pour comprendre comment gérer les appels HTTP avec des paramètres Unicode.
Si ces étapes ne résolvent pas votre problème, il peut être utile de consulter la documentation spécifique à votre environnement de développement RPG
Pour gérer les paramètres en Unicode dans l'URL lors de l'appel à un service web en RPG, vous pouvez essayer les étapes suivantes :
Vérifiez l'encodage du programme RPG : Assurez-vous que l'encodage du programme RPG est défini correctement pour prendre en charge l'Unicode. Vous pouvez utiliser CCSID 1208 pour l'encodage Unicode UTF-8.
Utilisez une variable CLOB pour stocker l'URL : Au lieu d'utiliser une variable VARCHAR(2048), utilisez une variable de type CLOB pour stocker l'URL. Assurez-vous que la taille de la variable CLOB est suffisamment grande pour contenir l'URL complet.
Encodez l'URL correctement : Vous pouvez utiliser la fonction DB2URL.URLENCODE pour encoder correctement les paramètres de l'URL. Assurez-vous d'inclure les paramètres dans l'URL avant de l'encoder. Par exemple :
arduino
Copy code
URL = 'http://serveur:port/contextpath/service?param=' || DB2URL.URLENCODE('電子郵件標題');
Utilisez une fonction d'appel HTTP appropriée : Assurez-vous d'utiliser une fonction d'appel HTTP qui prend en charge les paramètres Unicode dans l'URL. Vérifiez la documentation de votre environnement de développement RPG pour trouver une fonction d'appel HTTP appropriée. Vous pouvez également consulter des exemples de code ou des tutoriels spécifiques à votre environnement pour comprendre comment gérer les appels HTTP avec des paramètres Unicode.
Si ces étapes ne résolvent pas votre problème, il peut être utile de consulter la documentation spécifique à votre environnement de développement RPG
Choisissez la meilleure tablette pour dessiner