ADELIA |
VADELIA |
SADELIA |
WADELIA |
|
(I/B) |
(I/B) (C/S) |
(B) (S) |
(I/B) (C/S) |
Paragraphe d'utilisation
Tous
Syntaxe
EXECUTER_HTTP *URL(Url) *OPTIONS(Options) *DONNEES(données) *HEADER(Header) Réponse *COOKIES(Cookies) *CODE_HTTP(codeHttp)
→ |
<variable alpha> | <constante alpha> | |
→ |
<variable alpha> | <constante alpha> | |
→ |
Type, Valeur | |
Type |
→ |
<variable alpha> | <constante alpha> |
Valeur |
→ |
<variable alpha> | <constante alpha> | <variable image> | <liste> |
Liste |
→ |
<liste Adélia : alpha, alpha, alpha, image, alpha> |
→ |
<liste Adélia : alpha, alpha> | |
→ |
*REPONSE(réponse) | *FICHIER(NomFichier) | |
Réponse |
→ |
<variable alphanumérique | <variable image> |
NomFichier |
→ |
<variable alphanumérique> | <constante alphanumérique> |
→ |
<liste Adélia : alpha, alpha, alpha, alpha, alpha, bool, bool> | |
→ |
<variable numérique> |
Description
Permet de créer une connexion HTTP avec le serveur Web et de transférer des données avec l'URL indiquée.
Les méthodes HTTP GET, POST, PUT, HEAD, OPTIONS, DELETE, TRACE et PATCH sont permises.
Il est notamment possible :
- d'établir des connexions sécurisées via SSL avec l'utilisation de certificats,
- de définir un mode d'authentification BASIC ou DIGEST,
- de déléguer la requête à un Proxy,
- d'utiliser des Cookies.
Cliquez ci-dessous pour un accès rapide à la description des différents paramètres :
- Paramètre *URL
- Paramètre *OPTIONS
- Paramètre *DONNEES
- Paramètre *HEADER
- Paramètre Réponse
- Paramètre *COOKIES
- Paramètre *CODE_HTTP
*URL
Le paramètre *URL est une variable ou une constante alphanumérique qui définit, en entrée, l'adresse URL (Uniform Resource Locator) de la ressource.
Si le numéro de port n'est pas précisé dans l'URL, Adélia utilise le port 80.
L'URL désigne soit une ressource accessible via le protocole HTTP ou HTTPS, soit une ressource locale accessible via FILE://.
Paramètre obligatoire.
Exemple :
EXECUTER_HTTP *URL('http://localhost:8080/awstest/ws/personnes/1') *REPONSE(VAR_REP)
Retour à la liste des paramètres
*OPTIONS
Le paramètre *OPTIONS permet de définir, en entrée, les options de la requête HTTP à exécuter. Celle-ci contient les noms des options suivies de leur valeur.
Le nom de l'option et sa valeur sont séparés par un espace.
Les noms des options commencent toujours par 2 tirets (--).
Les couples option/valeur sont également séparés par un espace.
Paramètre facultatif.
Exemple :
--request GET --header Accept: application/json
Remarque : si le paramètre *OPTIONS n'est pas défini ou si l'option --request n'est pas précisée, Adélia considère que la méthode HTTP à exécuter est GET.
Exemple :
L'instruction EXECUTER_HTTP *url('http://localhost:8080/awstest/ws/personnes/') *REPONSE(VAR_REP) récupère la liste des personnes retournée par le service Web.
Les options disponibles sont les suivantes :
- Options relatives à l'authentification du serveur lors d'une connexion via SSL (https) :
Option |
Valeur |
Description |
--cacert |
<Nom fichier Certificat> |
En génération Windows ou Java, définit le nom du fichier qui contient les certificats. Rappel : les certificats servent à distribuer la clé publique et à vérifier l'identité du serveur sur lequel on souhaite envoyer des informations privées. Les certificats doivent être au format PEM. En génération AS/400, définit le chemin complet dans l'IFS du store qui contient tous les certificats et CA. Cette option doit être définie uniquement si l'on souhaite utiliser un store différent du store *SYSTEM utilisé par défaut. Le store système par défaut se trouve dans /QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
- Options relatives à l'authentification du client lors d'une connexion via SSL (https) :
Option |
Valeur |
Description |
--cert |
<Nom fichier Certificat> |
En génération Windows ou Java, définit le fichier contenant le certificat du client à utiliser. Le fichier peut contenir la clé privée concaténée avec le certificat client (certificate chain file). Il peut ne contenir que le certificat. Dans ce cas, il faut utiliser l'option --key pour définir la clé privée. En génération AS/400, définit le label du certificat client (Certificate label) qui a été utilisé lors de son importation dans le DCM. Le certificat au format PEM ou PKCS#12 doit contenir la clé privée au moment de l'importation dans le DCM. Si la clé privée est protégée par un mot de passe il vous sera demandé de le saisir lors de l'importation. Plus d'informations dans le Wiki Adélia. Rappel : le certificat client permet au serveur de s'assurer que le client est bien celui qu'il prétend être. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
--cert-type |
PEM | DER |
Type du certificat fourni. Si aucun format n'est spécifié, le format PEM est utilisé. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. Pas utilisé en génération AS/400. |
--key |
<nom fichier clé privée> |
Nom du fichier contenant la clé privée. Pas utilisé en génération AS/400. |
--key-type |
PEM | DER |
Format de la clé privée. Si aucun format n'est spécifié, le format PEM est utilisé. Pas utilisé en génération AS/400. |
--pass |
<passphrase> |
Phrase secrète pour protéger la clé privée. Rappel : le passphrase est l'équivalent d'un mot de passe très sécurisé pour chiffrer la clé privée. Nécessaire pour charger la clé privée lorsque celle-ci est chiffrée. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. Pas utilisé en génération AS/00. |
- Options relatives à une connexion via SSL (https) :
Option |
Valeur |
Description |
--insecure |
Aucune valeur à indiquer |
Le certificat et l'identité du serveur ne sont pas vérifiés. Cependant, les données transférées sont toujours chiffrées. |
--TLSv1 |
Aucune valeur à indiquer |
Utilise la version TLSv1 de SSL. |
--TLSv1.0 |
Aucune valeur à indiquer |
Utilise la version TLSv1.0 de SSL. |
--TLSv1.1 |
Aucune valeur à indiquer |
Utilise la version TLSv1.1 de SSL. |
--TLSv1.2 |
Aucune valeur à indiquer |
Utilise la version TLSv1.2 de SSL. |
--SSLv2 |
Aucune valeur à indiquer |
Utilise la version SSLV2 de SSL. |
--SSLv3 |
Aucune valeur à indiquer |
Utilise la version SSLV3 de SSL. |
- Options relatives à l'utilisation d'un Proxy :
Option |
Paramètres |
Description |
--proxy |
<http://[utilisateur:mot de passe@] NomHoteProxy [:NumeroPort]> |
Définit l'adresse du Proxy à utiliser. Celle-ci peut être :
Si le numéro de port n'est pas spécifié, Adélia utilise le numéro de port 1080. Il est possible de définir le nom de l'utilisateur et son mot de passe via l'option --proxy-user. Remarque : le Proxy doit obligatoirement être un Proxy HTTP. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
--proxy-digest |
Aucune valeur à indiquer |
Utilise le mode d'authentification DIGEST pour la connexion au serveur Proxy. |
--proxy-basic |
Aucune valeur à indiquer |
Utilise le mode d'authentification BASIC pour la connexion au serveur Proxy. Remarque : En génération Java, le mode d'authentification BASIC ne fonctionne pas par défaut. Cela est dû au fait que, dans sa version JDK 8u11, Oracle désactive par défaut l'authentification BASIC. Il est toutefois possible de la réactiver en fixant la propriété système jdk.http.auth.tunneling.disabledSchemes au lancement de la JVM => '-Djdk.http.auth.tunneling.disabledSchemes=""'. |
--proxy-user |
<utilisateur:mot de passe> |
Nom de l'utilisateur et mot de passe pour l'authentification au serveur Proxy. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
--proxy-header |
<nomProxyHeader: valeur> |
En-têtes à inclure à la requête HTTP à destination du serveur Proxy. L'option doit être répétée autant de fois qu'il y a d'en-têtes à inclure. Exemple : EXECUTER_HTTP *URL('http://exemple.fr/aws_ressource') *OPTIONS('--proxy-header Cache-Control: proxy-revalidate --proxy-header Transfer-Encoding: chunked') *REPONSE(VAR_REP) |
- Option relative aux Cookies :
- Option relative aux Cookies :
Option |
Paramètres |
Description |
--cookie |
<nom1=valeur1 ; nom2=valeur2> |
Liste des Cookies à envoyer au serveur, lesquels doivent avoir été envoyés précédemment par le serveur. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
- Options relatives à l'authentification :
- Options relatives à l'authentification :
Option |
Paramètres |
Description |
--user |
<utilisateur : mot de passe> |
Nom de l'utilisateur et son mot de passe pour l'authentification au serveur Web. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
--digest |
Aucune valeur à indiquer |
Utilise le mode d'authentification DIGEST pour la connexion au serveur. |
--basic |
Aucune valeur à indiquer |
Utilise le mode d'authentification BASIC pour la connexion au serveur. |
--anyauth |
Aucune valeur à indiquer |
Utilise le mode d'authentification le plus sécurisé parmi les méthodes que réclame le site distant. |
- Option relative aux Header de la requête :
- Option relative aux Header de la requête :
Option |
Paramètres |
Description |
--header |
<nomHeader: valeur> |
En-têtes à inclure à la requête HTTP à destination du serveur. L'option doit être répétée autant de fois qu'il y a d'en-têtes à inclure. Exemple : EXECUTER_HTTP URL('http://exemple.fr/aws_ressource') *OPTIONS('--header Content-Type: application/json --header Transfer-Encoding: chunked') *REPONSE(VAR_REP) Remarque : cette option n'inclut pas les Header de la réponse. Ces derniers sont écrits dans le paramètre *HEADER. |
- Options particulières pour la gestion des conversions en génération AS/400 ou Unicode :
Par défaut sur l'AS/400, toutes les valeurs d'entrée "alpha" sont converties depuis la page de code EBCDIC courante ou Unicode (en cas de génération Unicode) vers la page de code ISO 819, et les données reçues sont converties depuis la page de code ISO 819 vers la page de code EBCDIC courante ou Unicode (en cas de génération Unicode).
Il est nécessaire de définir le mode de conversion pour chaque option sur laquelle on ne souhaite pas gérer la conversion par défaut.
Option |
Paramètres |
Description |
--conv-utf8 |
<nom option> ou *DONNEES |
Convertit la valeur associée de l'option ou la donnée à envoyer depuis la page de code EBCDIC courante ou Unicode en UTF8. |
--no-conv |
<nom option> ou *DONNEES |
Aucune conversion n'est effectuée entre les pages de code EBCDIC ou Unicode et ISO 819. |
--conv-utf8 | *REPONSE | Convertit la réponse reçue de l'UTF8 vers la page de code EBCDIC courante ou Unicode. |
--no-conv | *REPONSE | Aucune conversion n'est effectuée sur la réponse reçue. |
Les noms des options doivent être saisis sans les caractères "--".
En Java et en Windows, il est possible de modifier le mode de conversion pour les données à envoyer et les données reçues.
Par défaut, en Java, les données à envoyer sont converties de l'UTF16 vers la page de code courante (ANSI/ASCII), et les données reçues sont converties de la page de code courante (ANSI/ASCII) vers l'UTF16.
Option |
Paramètres |
Description |
--conv-utf8 |
*DONNEES |
Convertit la donnée à envoyer de l'UTF16 en UTF8. |
--conv-utf8 |
*REPONSE |
Convertit la réponse reçue de l'UTF8 en UTF16. |
--no-conv |
*DONNEES *REPONSE |
Aucune conversion n'est effectuée entre l'UTF16 et la page de code courante. |
Par défaut, en Windows Unicode, les données à envoyer sont converties de l'Unicode vers la page de code courante (ANSI), et les données reçues sont converties de la page de code courante vers l'Unicode.
Option |
Paramètres |
Description |
--conv-utf8 |
*DONNEES |
Convertit la donnée à envoyer de l'Unicode en UTF8. |
--conv-utf8 |
*REPONSE |
Convertit la réponse reçue de l'UTF8 vers l'Unicode. |
--no-conv |
*DONNEES *REPONSE |
Aucune conversion n'est effectuée entre l'Unicode et la page de code courante. |
Par défaut, en Windows (non Unicode), aucune conversion n'est effectuée sur les données à envoyer/à recevoir.
Option |
Paramètres |
Description |
--conv-utf8 |
*DONNEES |
Convertit la donnée à envoyer depuis la page de code courante (ANSI) en UTF8. |
--conv-utf8 |
*REPONSE |
Convertit la réponse reçue de l'UTF8 vers la page de code courante (ANSI). |
Exemple : ... *OPTIONS( ... --no-conv *REPONSE –no-conv *DONNEES)
- Options diverses :
- Options diverses :
Option |
Paramètres |
Description |
--location |
Aucune valeur à indiquer |
Autorise la redirection de protocole (par exemple de http à https). Si le serveur renvoie un code HTTP 3xx, Adélia se charge automatiquement de renvoyer la requête au nouvel emplacement. |
--request |
GET | PUT | POST | DELETE | HEAD | OPTIONS | TRACE | PATCH |
Méthode HTTP à utiliser. |
--compressed | br | deflate | gzip | aucune valeur ou plusieurs de ces valeurs séparées par une virgule |
Accepte une réponse compressée suivant l'algorithme indiqué (br ou/et deflate ou/et gzip). Un "--compressed" (sans valeur) est équivalent à un "–compressed br,deflate,gzip". Exemples : --compressed gzip ==> on accepte une réponse compressée suivant l'algorithme gzip --compressed br,deflate ==> on accepte une réponse compressée suivant l'algorithme br ou suivant l'algorithme deflate. --compressed ==> on accepte une réponse compressée suivant l'algorithme br ou suivant l'algorithme deflate ou suivant l'algorithme gzip. |
--http1.0 |
Aucune valeur à indiquer |
La version du protocole HTTP à utiliser est HTTP 1.0. |
--http1.1 |
Aucune valeur à indiquer |
La version du protocole HTTP à utiliser est HTTP 1.1. |
--connect-timeout |
<timeout> |
Définit un temps maximum (en millisecondes) pour l'étape de la connexion au serveur. Si le temps est dépassé, le mot réservé *CODE_RETOUR reçoit le code erreur 28. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
--max-time |
<timeout> |
Définit un temps maximum (en millisecondes) pour l'ensemble de l'opération : connexion + transfert des données. Si le temps est dépassé, le mot réservé *CODE_RETOUR reçoit le code erreur 28. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. |
--user-agent |
<agent utilisateur> |
Chaîne alpha permettant à l'application cliente de s'identifier auprès du serveur. Si l'option est définie plusieurs fois, c'est uniquement la dernière qui est prise en compte. Exemple : EXECUTER_HTTP *URL('http://exemple.fr/aws_ressource') *OPTIONS('--request GET --user-agent Mozilla/4.0') *REPONSE(VAR_REP) |
Retour à la liste des paramètres
*DONNEES
Le paramètre *DONNEES définit les données en entrée à envoyer aux serveurs.
Il se compose de deux champs (type et valeur) qui permettent de définir le type d'envoi et les données à envoyer.
Le champ type définit le mode d'envoi à exécuter :
Mode d'envoi |
Description |
DATA |
Envoie des données alphanumériques. Dans ce cas, le champ valeur peut être soit une variable alpha, une constante alpha ou une variable image contenant les données, soit une liste. Lorsque le champ valeur est une liste, cette dernière se compose de la manière suivante : Colonne 1 => Champ alphanumérique contenant le nom du champ. Colonne 2 => Champ alphanumérique contenant le type de la valeur : A | F A : la valeur à envoyer est contenue dans la colonne 3 de type alpha. F : la valeur à envoyer est contenue dans le fichier dont le nom est contenu dans la colonne 3. Colonne 3 => Champ alphanumérique contenant soit la valeur, soit le nom d'un fichier. Colonne 4 => Champ de type image. Colonne 5 => Champ alphanumérique. Valeur ignorée. Lorsque l'on définit à travers la liste plusieurs couples nom/valeur, les données à envoyer sont assemblées et séparées par le caractère &. Adélia envoie ainsi les données en utilisant le type MIME application/x-www-form-urlencoded. |
DATA-FILE |
Identique au type DATA, à la différence près que lorsque le champ valeur est une variable alpha ou une constante alpha, celui-ci contient le nom d'un fichier contenant les données à envoyer. |
DATA-URLENCODE |
Identique au type DATA, auquel on applique le codage d'URL : URL ENCODING. Tous les caractères sont convertis en '%NN' (où NN est le code hexadécimal du caractère), à l'exception des caractères suivants : a-z, A-Z, 0-9, '-', '.', '_' et '~' . |
DATA-URLENCODE-FILE |
Identique au type DATA-URLENCODE, à la différence près que lorsque le champ valeur est une variable alpha ou une constante alpha, celui-ci contient le nom d'un fichier contenant les données à envoyer. |
FORM |
A la manière d'un formulaire HTML, les données sont envoyées en utilisant le type MIME multipart/form-data. Il est possible de définir une liste de couples nom/valeur à envoyer au serveur. Dans un formulaire HTML, nom représente le nom d'un champ du formulaire et valeur représente sa valeur. Le champ valeur doit être une liste se composant de la manière suivante : Colonne 1 => Champ alphanumérique contenant le nom du champ. Colonne 2 => Champ alphanumérique contenant le type de la valeur : A | F | I A : la valeur à envoyer est contenue dans la colonne 3 de type alpha. F : la valeur à envoyer est contenue dans le fichier dont le nom est contenu dans la colonne 3. I : la valeur à envoyer est contenue dans la colonne 4 de type Image. Colonne 3 => Champ alphanumérique contenant soit la valeur, soit le nom d'un fichier. Colonne 4 => Champ de type image. Colonne 5 => Champ alphanumérique indiquant le Content-type de la valeur (exemple : 'image.png'). Saisie facultative. Le champ valeur peut également être une variable alpha, une constante alpha ou une image contenant les données à envoyer. Lorsque ce type d'envoi est utilisé, la méthode HTTP est forcément la méthode POST. Il n'est pas nécessaire de la définir dans le paramètre *OPTIONS. |
FORM-FILE |
Identique au type FORM, à la différence près que lorsque le champ valeur est une variable alpha ou une constante alpha, celui-ci contient le nom d'un fichier contenant les données à envoyer. |
Retour à la liste des paramètres
*HEADER
Le paramètre *HEADER est une liste Adélia contenant les en-têtes associés à la réponse faite par le serveur au client.
Chaque élément de la liste est constitué du nom de l'en-tête et de sa valeur.
Colonne 1 |
→ |
Champ alphanumérique contenant le nom de l'en-tête. |
Colonne 2 |
→ |
Champ alphanumérique contenant la valeur de l'en-tête. |
Paramètre facultatif.
Retour à la liste des paramètres
Réponse
Le paramètre Réponse contient la réponse faite par le serveur au client.
- Si le paramètre est encapsulé par *REPONSE, il représente soit une variable alphanumérique, soit une variable de type image.
La variable reçoit le contenu de la réponse. - Si le paramètre est encapsulé par *FICHIER, il représente une variable alphanumérique ou une constante alphanumérique, laquelle définit le nom du fichier dans lequel la réponse est écrite.
- Si le paramètre est encapsulé par *REPONSE, il représente soit une variable alphanumérique, soit une variable de type image.
Paramètre facultatif.
Retour à la liste des paramètres
*COOKIES
Le paramètre *COOKIES est une liste en entrée/sortie.
En entrée, la liste peut contenir des Cookies à envoyer au serveur, récupérés par exemple en réponse d'une précédente requête. On y ajoute en sortie les Cookies retournés par le serveur.
Paramètre facultatif.
La liste doit contenir sept colonnes et avoir la structure suivante :
Colonne 1 |
→ |
Champ alphanumérique contenant le nom du Cookie |
Colonne 2 |
→ |
Champ alphanumérique contenant la valeur du Cookie. |
Colonne 3 |
→ |
Champ alphanumérique contenant la date d'expiration au-delà de laquelle le Cookie ne doit plus être envoyé. Le champ Date doit avoir la forme suivante : |
Date |
→ |
EEE, dd MMM yyyy HH:mm:ss |
EEE |
→ |
Jour de la semaine (sur 3 caractères) : Mon | Tue | Wed | Thu | Fri | Sat | Sun |
dd |
→ |
Jour du mois : de 01 à 31 |
MMM |
→ |
Mois (sur 3 caractères) : Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |
yyyy |
→ |
Année (sur 4 chiffres) |
HH |
→ |
Heure : de 0 à 23 |
mm |
→ |
Minutes |
ss |
→ |
Secondes |
Colonne 4 |
→ |
Champ alphanumérique contenant le chemin, lequel doit exister dans la ressource demandée pour que le Cookie soit envoyé.Correspond à l'option path de l'en-tête Set-Cookie. |
Colonne 5 |
→ |
Champ alphanumérique contenant le domaine pour lequel le Cookie doit être envoyé.Correspond à l'option domain de l'en-tête Set-Cookie. |
Colonne 6 |
→ |
Champ booléen permettant de bloquer (ou non) l'envoi du Cookie sur un échange non sécurisé.Correspond à l'option secure de l'en-tête Set-Cookie. |
Colonne 7 |
→ |
Champ booléen permettant de bloquer (ou non) la lecture du Cookie par un script JavaScript, côté navigateur.Correspond à l'option httpOnly de l'en-tête Set-Cookie. |
Retour à la liste des paramètres
*CODE_HTTP
Le paramètre *CODE_HTTP reçoit en retour le code HTTP du résultat de la requête.
Paramètre facultatif.
Dans le cas d'une erreur interne ou bien en raison d'un mauvais passage de paramètre, il arrive que ce paramètre ne soit pas mis à jour.
Si cela arrive, il est possible de tester le mot réservé *CODE_RETOUR après l'exécution de l'instruction. Si l'opération s'est bien déroulée, *CODE_RETOUR renvoie *NORMAL.
Retour à la liste des paramètres
Mode TRACE
Il est possible de tracer toutes les informations envoyées et reçues lors de l'exécution de la requête HTTP en activant le niveau "DEBUG" dans le logger "com.hardis.adelia.varuntme.executeHttp" du fichier log4c.xml dans un environnement Windows ou AS/400 et le logger "com.hardis.adelia.lang.dataTransfer.executeHttp" du fichier log4j.properties dans un environnement Java.
Dans un environnement Windows ou AS/400 il est possible d'obtenir plus d'informations en activant le niveau "TRACE" du logger spécifique. Dans ce cas, les informations sont contenues dans le fichier Windows '%TMP%\executeHttpDumpl<PID>' (où PID est l'identifiant du processus courant) et le fichier AS/400 '/tmp/executeHttpDumpl<PID>' (où PID est le numéro du JOB AS/400).
Par exemple
* Consommation d'un service Web : récupération du détail d'une personne (opération de type GET)
EXECUTER_HTTP *URL('http://localhost :8080/demo/rest/personnes/1') *OPTIONS('--header Accept: application/json') *REPONSE(VAR_RES) *CODE_HTTP(WCODE_HTTP)
* Consommation d'un service Web : mise à jour du détail d'une personne (opération de type PUT)
EXECUTER_HTTP *URL('http://localhost :8080/demo/rest/personnes/1') *OPTIONS('--request PUT --header Content-Type: application/json --header Accept: application/json') *DONNEES('DATA' , '{"PERSONNE": {"NumIdentif":1, "Nom":"DUPOND", "Prenom":"PASCAL"}}') *REPONSE(VAR_RES) *CODE_HTTP(WCODE_HTTP)
* Envoi d'une image en attachement (opération de type POST avec paramètre en multipart/form-data)
EXECUTER_HTTP *URL('http://localhost :8080/demo/rest/uploadimage') *DONNEES('FORM-FILE' , 'C:\images\voiture.png') *CODE_HTTP(WCODE_HTTP)