web services basés sur SQL
Citation de Steph le 5 février 2020, 15 h 41 minBonjour,
Comment géré une authentification basic sur un WS basés sur SQL ?
Sur un WS basés sur un programme je n'ai pas ce pb car je gère l'authentification dans mon programme ...
Merci d'avance.
Bonjour,
Comment géré une authentification basic sur un WS basés sur SQL ?
Sur un WS basés sur un programme je n'ai pas ce pb car je gère l'authentification dans mon programme ...
Merci d'avance.
Citation de remit le 5 février 2020, 18 h 12 minPeut être des réponses dans ce document :
Peut être des réponses dans ce document :
Fichiers téléversés :Citation de monthi le 5 février 2020, 20 h 10 minBonjour
je suppose que tu parles d'un web service client.
pour faire de l'authentification basic il te faut encoder le profil et le mot de passe en base 64
Attention il tout convertir en ascii avec l'encodage
exemple de code:
dcl-s Authorization varchar(600);
dcl-s headerhttp varchar(1000);
dcl-s fic_csv sqltype(blob_file);
dcl-s urlname varchar(2000) ;
// Ascii est une fonction interne qui convertie dans la page code spéfiée (1252 ici) via apiconv
Authorization=ascii(%trimr(id)+':'+%trim(password):1252);
// encodeage base64
exec sql
values(systools.base64encode(:Authorization)) into :Authorization;
// composition du Header Http
headerhttp='<httpHeader><header name="Authorization" value="Basic '+Authorization+'"/></httpHeader>';
//envoi de la requête a l'url contenu dans la variable urlname, et récupération du résultat dans un blob_file
exec sql
values(SYSTOOLS.HTTPGETBLOB(:urlname, cast(:headerhttp as clob(1k)))) into :fic_csv;
pour info voici le code de la fonction Ascii
//============================================================================================
dcl-Proc Ascii export;dcl-pi ascii varchar(1000000) rtnparm;
Ebcdic varchar(1000000) value;
ccsid$ int(5) const;
end-pi;dcl-s ptrin pointer;
Dcl-s p_Bufout pointer;
Dcl-s BufInsize uns(10);
Dcl-s BufOutsize uns(10);
Dcl-s rc uns(10);
Dcl-s bufout char(1000000);
dcl-s car char(1) based(ptr_car);Dcl-ds ToAscii;
ICORV_A bindec(9);
ICOC_A bindec(9) DIM(00012);
end-ds;
//
Dcl-ds dsFROM;
from_ccsid int(10) Inz(0);
from_ca int(10) Inz(0);
from_Sa int(10) Inz(0);
from_ss int(10) Inz(1);
from_il int(10) Inz(0);
from_E0 int(10) Inz(1);
from_r char(8) INZ(*allx'00');
end-ds;dcl-ds dsTO;
To_ccsid int(10);
To_ca int(10) Inz(0);
To_Sa int(10) Inz(0);
To_ss int(10) Inz(1);
To_il int(10) Inz(0);
To_E0 int(10) Inz(1);
To_r char(8) INZ(*allx'00');
end-ds;Dcl-pr IConvOpen char(52) ExtProc('QtqIconvOpen');
*n pointer Value options(*string); // To Code
*n pointer Value options(*string); //Fr Code
end-pr;Dcl-pr IConv int(10) ExtProc('iconv');
*n Char(52) Value; // Code Discripter
*n pointer value; // ptr to InBuffer Ptr
*n uns(10); // inSize ptr
*n pointer value; // ptr to OutBuffer Pt
*n uns(10); // OutSize ptr
end-pr;Dcl-pr IConvClose int(10) ExtProc('iconv_close');
*n char(52) Value;
end-pr;To_ccsid=ccsid$;
ToAscii=IConvOpen(%addr(dsTo):%addr(dsFROM));
ptrin=%addr(Ebcdic:*data);
bufInsize=%len(Ebcdic);
bufout='';
BufOutsize=%size(bufout);
p_bufout=%addr(bufout);
rc=iconv(ToAscii:%addr(ptrin):bufinsize:%addr(p_bufout):bufOutsize);
iconvclose(ToAscii);return %subst(bufout:1:%size(bufout)-bufOutsize);
end-proc;
Bonjour
je suppose que tu parles d'un web service client.
pour faire de l'authentification basic il te faut encoder le profil et le mot de passe en base 64
Attention il tout convertir en ascii avec l'encodage
exemple de code:
dcl-s Authorization varchar(600);
dcl-s headerhttp varchar(1000);
dcl-s fic_csv sqltype(blob_file);
dcl-s urlname varchar(2000) ;
// Ascii est une fonction interne qui convertie dans la page code spéfiée (1252 ici) via apiconv
Authorization=ascii(%trimr(id)+':'+%trim(password):1252);
// encodeage base64
exec sql
values(systools.base64encode(:Authorization)) into :Authorization;
// composition du Header Http
headerhttp='<httpHeader><header name="Authorization" value="Basic '+Authorization+'"/></httpHeader>';
//envoi de la requête a l'url contenu dans la variable urlname, et récupération du résultat dans un blob_file
exec sql
values(SYSTOOLS.HTTPGETBLOB(:urlname, cast(:headerhttp as clob(1k)))) into :fic_csv;
pour info voici le code de la fonction Ascii
//============================================================================================
dcl-Proc Ascii export;
dcl-pi ascii varchar(1000000) rtnparm;
Ebcdic varchar(1000000) value;
ccsid$ int(5) const;
end-pi;
dcl-s ptrin pointer;
Dcl-s p_Bufout pointer;
Dcl-s BufInsize uns(10);
Dcl-s BufOutsize uns(10);
Dcl-s rc uns(10);
Dcl-s bufout char(1000000);
dcl-s car char(1) based(ptr_car);
Dcl-ds ToAscii;
ICORV_A bindec(9);
ICOC_A bindec(9) DIM(00012);
end-ds;
//
Dcl-ds dsFROM;
from_ccsid int(10) Inz(0);
from_ca int(10) Inz(0);
from_Sa int(10) Inz(0);
from_ss int(10) Inz(1);
from_il int(10) Inz(0);
from_E0 int(10) Inz(1);
from_r char(8) INZ(*allx'00');
end-ds;
dcl-ds dsTO;
To_ccsid int(10);
To_ca int(10) Inz(0);
To_Sa int(10) Inz(0);
To_ss int(10) Inz(1);
To_il int(10) Inz(0);
To_E0 int(10) Inz(1);
To_r char(8) INZ(*allx'00');
end-ds;
Dcl-pr IConvOpen char(52) ExtProc('QtqIconvOpen');
*n pointer Value options(*string); // To Code
*n pointer Value options(*string); //Fr Code
end-pr;
Dcl-pr IConv int(10) ExtProc('iconv');
*n Char(52) Value; // Code Discripter
*n pointer value; // ptr to InBuffer Ptr
*n uns(10); // inSize ptr
*n pointer value; // ptr to OutBuffer Pt
*n uns(10); // OutSize ptr
end-pr;
Dcl-pr IConvClose int(10) ExtProc('iconv_close');
*n char(52) Value;
end-pr;
To_ccsid=ccsid$;
ToAscii=IConvOpen(%addr(dsTo):%addr(dsFROM));
ptrin=%addr(Ebcdic:*data);
bufInsize=%len(Ebcdic);
bufout='';
BufOutsize=%size(bufout);
p_bufout=%addr(bufout);
rc=iconv(ToAscii:%addr(ptrin):bufinsize:%addr(p_bufout):bufOutsize);
iconvclose(ToAscii);
return %subst(bufout:1:%size(bufout)-bufOutsize);
end-proc;
Citation de Steph le 6 février 2020, 15 h 39 minEn fait mon pb n'est pas de consommer un WS avec une authentification basic ça c'est ok
Mon pb c'est de fournir un WS avec une authentification basic en le déployant via une requête sql (voir Pause-café n° 82 )
En fait mon pb n'est pas de consommer un WS avec une authentification basic ça c'est ok
Mon pb c'est de fournir un WS avec une authentification basic en le déployant via une requête sql (voir Pause-café n° 82 )
Fichiers téléversés :Citation de monthi le 6 février 2020, 17 h 15 minBonjour
regarde ce pdf
Cdlt
Bonjour
regarde ce pdf
Cdlt
Citation de Steph le 7 février 2020, 9 h 42 minMerci - je pense que la solution est dans cette doc ….
Merci - je pense que la solution est dans cette doc ….