Extrait d'un article sur itpro http://www.itpro.fr/index1.asp?IdArticle=1703&rub=1
Utiliser FTP en mode Online
C’est sa syntaxe et ses options qui font la puissance de FTP. Voici comment utiliser FTP pour effectuer des transferts de données :
Utiliser la commande FTP pour établir une connexion avec le système à distance. On peut se connecter en donnant le nom ou l’adresse IP du système à distance.
Entrer un ID et mot de passe utilisateur valide pour se connecter au système à distance.
Définir l’un des modes de transfert suivants :
Binary. Le transfert d’images binaires est requis pour certains fichiers comme des fichiers de sauvegarde et des fichiers système de fichiers hiérarchiques (documents QDLS). Si TYPE n’est pas réglé sur binary quand on essaie de transférer de tels fichiers, un message vient indiquer que binary est obligatoire.
ASCII. On utilise le type de transfert ASCII pour transférer des fichiers documents vers ou à partir d’un système ASCII qui ne supporte pas la représentation EBCDIC. ASCII est le type de transfert par défaut.
EBCDIC. Le type de transfert EBCDIC est utile quand on transfère des fichiers vers ou à partir d’un autre système EBCDIC parce qu’on se dispense ainsi de traduire entre ASCII et EBCDIC sur les deux systèmes.
4. Exécuter un ou plusieurs ensembles de commandes FTP (par exemple, GET LIBXXX/FILEXXX. SOURCE1 pour extraire un source de l’iSeries). A noter que l’on utilisera la commande PUT au lieu de la commande GET pour transférer des sources vers l’iSeries.
Utiliser la commande QUIT pour fermer la connexion et quitter le mode FTP.
Dans des scénarios en temps réel, il est souvent impossible d’utiliser FTP interactif parce que les dumps de fichier peuvent être créés pendant un processus batch et doivent être transférés immédiatement vers les systèmes à distance.
De plus, le fichier base de données risque de n’être mis à disposition du système qu’à une heure ou date particulière. De plus, les travaux de nuit comportant des transferts de fichiers peuvent être difficiles en raison de l’absence du personnel utilisateur.
Enfin, les sous-commandes FTP online ne sont pas supportées dans la programmation CL normales.
Dans de tels cas, le FTP automatisé peut s’avérer très utile.
FTP automatisé
FTP possède une caractéristique utile pour automatiser le transfert de données : les fichiers INPUT et OUTPUT.
L’instruction FTP lit (par défaut) dans le fichier INPUT (s’il existe) et exécute toutes les instructions qu’il contient.
De la même manière, elle envoie le journal des instructions exécutées et de leur état (correctement exécutées ou non) au fichier OUTPUT.
A l’aide de ces deux fichiers, on peut écrire un script qui automatise le transfert de données à partir d’un système à distance.
A titre d’exemple, la figure 1 montre un programme CL qui joue le rôle de programme driver pour la fonction FTP auto.
Il crée un fichier temporaire appelé FTPSRC avec deux membres – FTPMBR et FTPLOG – qui sont envoyés par écrasement dans les fichiers INPUT et OUTPUT (que la commande FTP utilisera).
Le fichier INPUT (qui a été écrasé) est peuplé par un programme RPG appelé à partir du CL driver.
Ce programme RPG écrit toutes les commandes FTP requises dans le fichier INPUT, y compris les champs ID et mot de passe utilisateur fictifs nécessaires pour se connecter à la machine locale (nous reviendrons sur ce point plus loin).
La figure 2 montre un programme RPG appelé à partir du programme CL driver (figure 1) et qui écrit les commandes FTP requises dans le fichier INPUT.
(A noter que vous devez créer le fichier FTPSRC en utilisant la commande illustrée dans le programme CL de la figure 1 avant de pouvoir créer le programme RPG. C’est nécessaire pour des besoins de compilation.)
A la fin du programme, le fichier INPUT contient l’ensemble des instructions FTP à exécuter. La figure 3 montre un exemple de fichier INPUT.
L’instruction FTP suivante dans le programme CL driver (figure 1) lit dans le fichier INPUT et commence à exécuter les instructions qu’il contient.
Un inconvénient que vous remarquerez sûrement est le fait que nous n’avons pas la souplesse de nous connecter à une machine ; il nous faudrait coder en dur l’adresse IP d’une machine distante.
L’instruction FTP RMTSYS (LOOPBACK) permet de contourner ce problème.
Elle ne fait rien d’autre que de connecter à la machine locale elle-même (c’est-à-dire connecter à l’IP 127.0.0.1 en utilisant le port 21).
L’objet de cette opération est simplement d’entrer dans le mode FTP. Vous pourrez ensuite indiquer un ID et mot de passe utilisateur fictif (à l’intérieur du fichier INPUT) qui sera rejeté, mais notre objectif qui était d’entrer en mode FTP a été atteint.
A partir de là, nous pouvons ouvrir une connexion vers toute machine distante et autant de fois que nécessaire. L’adresse du système à distance peut aussi être acceptée comme un paramètre et il n’est pas nécessaire de la coder en dur.
A noter qu’il faut apporter quelques changements au programme RPG (figure 2) pour l’adapter à l’environnement de l’utilisateur. En fait, vous devez changer l’instruction
EVAL SRCDTA = _OPEN XXX.XXX.XX.XX '
pour refléter l’adresse/nom IP de l’iSeries à distance. Vous devez modifier l’instruction
EVAL SRCDTA = 'USER ANONYMOUS PASSWORD'
pour amener l’ID et mot de passe utilisateur réels de la machine à distance. Enfin, vous devez modifier
EVAL SRCDTA = 'CD FTPFILES'
et
EVAL SRCDTA = 'LCD TEST'
pour refléter le répertoire à distance à partir duquel l’utilisateur veut transférer des données et le répertoire local dans lequel il faut les transférer.
L’instruction FTP dirige son journal et l’état des différentes instructions FTP exécutées vers le fichier OUTPUT. La figure 4 montre un fichier OUTPUT type. Vous pouvez utiliser le fichier OUTPUT pour suivre l’état de l’exécution, et automatiser la suite du traitement en vous fondant sur lui. Vous pouvez maintenant programmer le programme driver (via le scheduler OS/400) pour qu’il fonctionne à une certaine heure. Le processus FTP est automatisé !
Nous avons étudié diverses méthodes de transfert de données et, par le déploiement en temps réel, nous sommes parvenus à la conclusion que l’automatisation de FTP au moyen de commandes CL est rapide et évolutive.
FTP automatisé limite aussi le besoin d’intervention manuelle et ouvre des possibilités pour la maintenance à distance des objets OS/400.
Cela peut être très utile dans de vastes projets – particulièrement quand des utilisateurs distribués accèdent au système et le maintiennent.
Nous tenons à remercier Infosys pour son encouragement à la conduite de cette recherche.
Utiliser FTP en mode Online
C’est sa syntaxe et ses options qui font la puissance de FTP. Voici comment utiliser FTP pour effectuer des transferts de données :
Utiliser la commande FTP pour établir une connexion avec le système à distance. On peut se connecter en donnant le nom ou l’adresse IP du système à distance.
Entrer un ID et mot de passe utilisateur valide pour se connecter au système à distance.
Définir l’un des modes de transfert suivants :
Binary. Le transfert d’images binaires est requis pour certains fichiers comme des fichiers de sauvegarde et des fichiers système de fichiers hiérarchiques (documents QDLS). Si TYPE n’est pas réglé sur binary quand on essaie de transférer de tels fichiers, un message vient indiquer que binary est obligatoire.
ASCII. On utilise le type de transfert ASCII pour transférer des fichiers documents vers ou à partir d’un système ASCII qui ne supporte pas la représentation EBCDIC. ASCII est le type de transfert par défaut.
EBCDIC. Le type de transfert EBCDIC est utile quand on transfère des fichiers vers ou à partir d’un autre système EBCDIC parce qu’on se dispense ainsi de traduire entre ASCII et EBCDIC sur les deux systèmes.
4. Exécuter un ou plusieurs ensembles de commandes FTP (par exemple, GET LIBXXX/FILEXXX. SOURCE1 pour extraire un source de l’iSeries). A noter que l’on utilisera la commande PUT au lieu de la commande GET pour transférer des sources vers l’iSeries.
Utiliser la commande QUIT pour fermer la connexion et quitter le mode FTP.
Dans des scénarios en temps réel, il est souvent impossible d’utiliser FTP interactif parce que les dumps de fichier peuvent être créés pendant un processus batch et doivent être transférés immédiatement vers les systèmes à distance.
De plus, le fichier base de données risque de n’être mis à disposition du système qu’à une heure ou date particulière. De plus, les travaux de nuit comportant des transferts de fichiers peuvent être difficiles en raison de l’absence du personnel utilisateur.
Enfin, les sous-commandes FTP online ne sont pas supportées dans la programmation CL normales.
Dans de tels cas, le FTP automatisé peut s’avérer très utile.
- Code:
Figure 1 : Exemple de programme CL pour automatiser FTP
PGM
CRTSRCPF FILE(QTEMP/FTPSRC) MBR(FTPMBR)
ADDPFM FILE(QTEMP/FTPSRC) MBR(FTPLOG)
OVRDBF FILE(INPUT) TOFILE(FTPSRC) MBR(FTPMBR)
OVRDBF FILE(FTPSRC) MBR(FTPMBR)
CALL FTPRPG
/* FTPRPG RPGLE program illustrated in Table 2 which writes a set of FTP
subcommands onto the overwritten file INPUT */
DLTOVR FILE(FTPSRC)
OVRDBF FILE(OUTPUT) TOFILE(QTEMP/FTPSRC) MBR(FTPLOG)
FTP RMTSYS(LOOPBACK) /*Please note this command carefully*/
DLTOVR FILE(INPUT OUTPUT)
DLTF FILE(QTEMP/FTPSRC)
MONMSG MSGID(CPF0000)
ENDPGM
FTP automatisé
FTP possède une caractéristique utile pour automatiser le transfert de données : les fichiers INPUT et OUTPUT.
L’instruction FTP lit (par défaut) dans le fichier INPUT (s’il existe) et exécute toutes les instructions qu’il contient.
De la même manière, elle envoie le journal des instructions exécutées et de leur état (correctement exécutées ou non) au fichier OUTPUT.
A l’aide de ces deux fichiers, on peut écrire un script qui automatise le transfert de données à partir d’un système à distance.
A titre d’exemple, la figure 1 montre un programme CL qui joue le rôle de programme driver pour la fonction FTP auto.
Il crée un fichier temporaire appelé FTPSRC avec deux membres – FTPMBR et FTPLOG – qui sont envoyés par écrasement dans les fichiers INPUT et OUTPUT (que la commande FTP utilisera).
Le fichier INPUT (qui a été écrasé) est peuplé par un programme RPG appelé à partir du CL driver.
Ce programme RPG écrit toutes les commandes FTP requises dans le fichier INPUT, y compris les champs ID et mot de passe utilisateur fictifs nécessaires pour se connecter à la machine locale (nous reviendrons sur ce point plus loin).
La figure 2 montre un programme RPG appelé à partir du programme CL driver (figure 1) et qui écrit les commandes FTP requises dans le fichier INPUT.
(A noter que vous devez créer le fichier FTPSRC en utilisant la commande illustrée dans le programme CL de la figure 1 avant de pouvoir créer le programme RPG. C’est nécessaire pour des besoins de compilation.)
A la fin du programme, le fichier INPUT contient l’ensemble des instructions FTP à exécuter. La figure 3 montre un exemple de fichier INPUT.
L’instruction FTP suivante dans le programme CL driver (figure 1) lit dans le fichier INPUT et commence à exécuter les instructions qu’il contient.
Un inconvénient que vous remarquerez sûrement est le fait que nous n’avons pas la souplesse de nous connecter à une machine ; il nous faudrait coder en dur l’adresse IP d’une machine distante.
L’instruction FTP RMTSYS (LOOPBACK) permet de contourner ce problème.
Elle ne fait rien d’autre que de connecter à la machine locale elle-même (c’est-à-dire connecter à l’IP 127.0.0.1 en utilisant le port 21).
L’objet de cette opération est simplement d’entrer dans le mode FTP. Vous pourrez ensuite indiquer un ID et mot de passe utilisateur fictif (à l’intérieur du fichier INPUT) qui sera rejeté, mais notre objectif qui était d’entrer en mode FTP a été atteint.
A partir de là, nous pouvons ouvrir une connexion vers toute machine distante et autant de fois que nécessaire. L’adresse du système à distance peut aussi être acceptée comme un paramètre et il n’est pas nécessaire de la coder en dur.
A noter qu’il faut apporter quelques changements au programme RPG (figure 2) pour l’adapter à l’environnement de l’utilisateur. En fait, vous devez changer l’instruction
EVAL SRCDTA = _OPEN XXX.XXX.XX.XX '
pour refléter l’adresse/nom IP de l’iSeries à distance. Vous devez modifier l’instruction
EVAL SRCDTA = 'USER ANONYMOUS PASSWORD'
pour amener l’ID et mot de passe utilisateur réels de la machine à distance. Enfin, vous devez modifier
EVAL SRCDTA = 'CD FTPFILES'
et
EVAL SRCDTA = 'LCD TEST'
pour refléter le répertoire à distance à partir duquel l’utilisateur veut transférer des données et le répertoire local dans lequel il faut les transférer.
L’instruction FTP dirige son journal et l’état des différentes instructions FTP exécutées vers le fichier OUTPUT. La figure 4 montre un fichier OUTPUT type. Vous pouvez utiliser le fichier OUTPUT pour suivre l’état de l’exécution, et automatiser la suite du traitement en vous fondant sur lui. Vous pouvez maintenant programmer le programme driver (via le scheduler OS/400) pour qu’il fonctionne à une certaine heure. Le processus FTP est automatisé !
- Code:
Figure 2 : Programme RPG appelé pour écrire des commandes FTP
dans le fichier INPUT
*Declare the input file
FFTPSRC UF A E DISK RENAME(FTPSRC:INPUT)
* Write the first sub command to INPUT file ’DUMMY DUMMY’
C EVAL SRCDTA = ’DUMMY DUMMY’
C WRITE INPUT
* Write the next sub command to INPUT file ’CLOSE’
C EVAL SRCDTA = ’CLOSE’
C WRITE INPUT
* Write the next sub command to INPUT file ’OPEN IP address’.
C EVAL SRCDTA = ’OPEN XXX.XXX.XX.XX’
C WRITE INPUT
* Write the next sub command to INPUT file USERID and Password.
C EVAL SRCDTA = ’USER ANONYMOUS PASSWORD’
C WRITE INPUT
* Write the next sub command to INPUT file to change the Directory
C EVAL SRCDTA = ’CD FTPFILES’
C WRITE INPUT
* Write the next sub command to INPUT file to change the local Directory
C EVAL SRCDTA = ’LCD TEST’
C WRITE INPUT
* Write the next sub command to INPUT file to send the file.
C EVAL SRCDTA = ’PUT QRPGLESRC.SRCFIL’
C WRITE INPUT
* Write the next sub command to INPUT file to close the FTP.
C EVAL SRCDTA = ’CLOSE’
C WRITE INPUT
* Write the next sub command to INPUT file to quit the FTP.
C EVAL SRCDTA = ’QUIT’
C WRITE INPUT
C SETON LR
Nous avons étudié diverses méthodes de transfert de données et, par le déploiement en temps réel, nous sommes parvenus à la conclusion que l’automatisation de FTP au moyen de commandes CL est rapide et évolutive.
FTP automatisé limite aussi le besoin d’intervention manuelle et ouvre des possibilités pour la maintenance à distance des objets OS/400.
Cela peut être très utile dans de vastes projets – particulièrement quand des utilisateurs distribués accèdent au système et le maintiennent.
Nous tenons à remercier Infosys pour son encouragement à la conduite de cette recherche.
- Code:
Figure 3 : Exemple de fichier INPUT écrit par le programme RPG
DUMMY DUMMY
CLOSE
OPEN ’XXX.XXX.XX.XX’
USER USERID PWD
/* One can write the set of FTP commands required to be executed out here*/
/* like GET, PUT etc */
CLOSE
QUIT
- Code:
Figure 4 : Exemple de fichier OUTPUT écrit par l’instruction FTP
Connecting to host LOOPBACK at address 127.0.0.1 using port 21.
220-QTCP at LOOPBACK.
220 Connection will close if idle more than 5 minutes.
Enter login ID (xxxxxxxx):
331 Enter password.
530 Log on attempt by user DUMMY rejected. Enter an FTP subcommand.
CLOSE 221 QUIT subcommand received.
Enter an FTP subcommand.
> OPEN ’XXX.XXX.XX.XX’
Connecting to remote host XXX.XXX.XX.XX using port 21.
220 distsrvr Microsoft FTP Service (Version 4.0).
Enter an FTP subcommand.
> USER XXXXXXX *******
331 Password required for XXXXXXXX.
230 User XXXXXXXX logged in.
Windows_NT version 4.0
Enter an FTP subcommand. /* the output of the execute command(s) would appear
here */
> CLOSE
221
Enter an FTP subcommand.
> QUIT