Instanciation d'un Object + Compatibilité MacOS

Instanciation d'un Object + Compatibilité MacOS - VB/VBA/VBS - Programmation

Marsh Posté le 03-11-2010 à 15:47:36    

Bonjour à tous,
 
Je tente le coup et je me jette à l'eau, mes recherches sur le forum et sur Internet (au sens vraiment large) depuis quelques jours me font tourner en bourrique, sur 2 questions assez précises :
 

  • Question 1 : Instanciation d'une session HTTP

Je suis en train de créer un fichier XLS qui, à terme, récupèrera des tableaux de données dispo sur un site Web.
Aujourd'hui, ce site est protégé par une identification SSO, où chaque utilisateur à un login/mot de passe (normal  :)  ) et doit s'authentifier pour récupérer les données.
 
Dans un seul et même SUB, pas de soucis, j'arrive à faire que l'utilisateur le logge, récupère un tableau et se délogge (je ne veux pas stocker les logins/password dnas le fichier - question de sécurité).
J'utilise pour ce faire la méthode CreateObject("WinHttp.WinHttpRequest.5.1" ), et tout se passe bien.
 
Là où ça se complique, c'est quand je veux séparer les étapes dans des SUB différents... En gros, j'aimerais que l'utilisateur puisse se logger (un SUB), récupérer les tableaux qu'il souhaite (autant de SUB qu'il souhaite) et qu'il se délogge (un dernier SUB).
 
Sauf que je ne suis pas capable de récupérer l'objet déjà créé et/ou tester son existence pour continuer...
 
 
 

  • Question 2 : Macros sous MacOS

Question plus rapide, mais tout aussi litigieuse : j'aimerais que mon fichier Excel soit compatible avec Excel 2011 sous MacOS, qui permets à nouveau (enfin !) l'usage des macros... Quelqu'un a-t-il déjà tenté l'aventure et si oui, quels sont vos expériences sur le sujet ?  :love:  
 
Navré d'avance si les sujets ont été traités ailleurs, je n'ai aps trouvé grand'chose via le moteur de recherche... mais j'espère que la communauté saura me sortir de ces mauvais pas  :hello:

Reply

Marsh Posté le 03-11-2010 à 15:47:36   

Reply

Marsh Posté le 03-11-2010 à 18:19:47    

Question 1 : Instanciation d'une session HTTP  
 
est ce que les sub vont être appelé d'un coup ?
ou a des moments différents (en fonction des évenements déclanché dans le fichier excel) ?
(cela va influer sur comment tu va stocker ta connection.)
 
peut tu donner la manière dont tu te connecte et transmet l'utilisateur/mot de passe à ton objet HttpRequest ? (extrait du code)
 
 
Question 2,
je ne connais pas... mais le fait de changer d'OS va jouer sur les librairie disponible ...
en gros faut que tu trouve la librairie qui te permette de créer l'objet HttpRequest ... (est elle disponible)
Si t'as pas de soucis a ce niveau la, je ne vois pas ou pourrait être l'obstacle...
 

Reply

Marsh Posté le 03-11-2010 à 19:40:19    

Voici le code qui fonctionne.
Dans un seul SUB, pas de soucis : il se logge, récupère les datas et se délogge (cf commentaires).
 
Là où ça se corse, c'est quand j'essaie de créer 3 subs séparer :
* un pour le login
* un pour la recup des datas
* un pour le log-out.
 
L'idée de base étant d'arriver à un bouton unique qui aurait le comportement suivant :
* l'utilisateur clique sur un bouton de récupérer des datas
* SI il y a une session ouverte ALORS on récupère les datas SINON on lui propose de se relogger
 
Du coup, il faudrait que je puisse vérifier que la session est toujours valide, en interrogeant le contenu de mon objet WinHTTP...
 
C'est plus clair ?
 
 

Code :
  1. Const reco = "      "
  2. Const PRINT_DEBUG = True
  3. Sub DebugBox(msg As String)
  4.     If PRINT_DEBUG = True Then
  5.         MsgBox msg
  6.     End If
  7. End Sub
  8. Sub Login()
  9.     Dim strCookieSSO As String
  10.     Dim strCookieWF As String
  11.     Dim strCookieTemp As String
  12.     Dim S_Login As String
  13.     Dim S_Password As String
  14.     Dim param
  15.    
  16.     frmLogon.Show
  17.     S_Login = frmLogon.txbLogin.Text
  18.     S_Password = frmLogon.txtPassword.Text
  19.     Unload frmLogon
  20.    
  21.     param = "username=" & S_Login & "&password=" & S_Password & "&lt=e1s1&_eventId=submit"
  22.    
  23.    
  24.     'Ouverture de session
  25.     Set HttpReq2 = CreateObject("WinHttp.WinHttpRequest.5.1" )
  26.    
  27.     'Appel de l'appli
  28.     URL = "URL D'ACTIVATION DE SESSION"
  29.     HttpReq2.Open "GET", URL, False
  30.     HttpReq2.SetRequestHeader "Connection", "Keep-Alive"
  31.     HttpReq2.Send
  32.     DebugBox (URL + " -> " + HttpReq2.responseText)
  33.     strCookieSSO = HttpReq2.GetResponseHeader("Set-Cookie" )
  34.     DebugBox (URL + " -> " + strCookieSSO)
  35.    
  36.     'Connexion au SSO CAS - DOMAINE SSO
  37.     URL = "URL DE CONNEXION"
  38.     HttpReq2.Open "POST", URL, False
  39.     HttpReq2.SetRequestHeader "Connection", "Keep-Alive"
  40.     HttpReq2.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  41.     strCookieTemp = Split(strCookieSSO, ";" )(0)
  42.     HttpReq2.SetRequestHeader "Cookie", strCookieTemp
  43.     HttpReq2.Send param
  44.     DebugBox (param)
  45.     DebugBox (URL + " -> " + HttpReq2.responseText)
  46.  'Validation de la connexion - DOMAINE SSO
  47.     URL = "URL_DE_CONFIRMATION"
  48.     HttpReq2.Open "GET", URL, False
  49.     HttpReq2.SetRequestHeader "Connection", "Keep-Alive"
  50.     HttpReq2.Send
  51.     DebugBox (URL + " -> " + HttpReq2.responseText)
  52.    
  53.     Range("retour" ).Value = Split(HttpReq2.responseText, reco)(2)
  54.    
  55.     'Recupération des datas HTML
  56.     URL = "URL DES DATS"
  57.     HttpReq2.Open "GET", URL, False
  58.     HttpReq2.SetRequestHeader "Connection", "Keep-Alive"
  59.     HttpReq2.Send
  60.     DebugBox (URL + " -> " + HttpReq2.responseText)
  61.     Range("retour2" ).Value = Split(HttpReq2.responseText, reco)(2)
  62.    
  63.  
  64.     'Log-out de l'appli
  65.     URL = "URL_DE_DECONNEXION"
  66.     HttpReq2.Open "GET", URL, False
  67.     HttpReq2.SetRequestHeader "Connection", "Keep-Alive"
  68.     HttpReq2.Send
  69.     MsgBox (URL + " -> " + HttpReq2.responseText)
  70.    
  71.     Range("retour" ).Value = "Out"
  72.  
  73. End Sub

Reply

Marsh Posté le 03-11-2010 à 20:54:56    

Je te répondrais mieux avec un exemple demain si j'ai le temps
 
mais va falloir que tu travailles avec des fonctions au lieu des méthodes
 
ensuite à ce niveau de programmation (objets et utilisations de librairie)
faut travailler avec option explicit, et typer toutes tes variables.
 
 
en gros tu doit faire ça :
déclarer une variable globale de type qui est renvoyé par CreateObject("WinHttp.WinHttpRequest.5.1" )


Dim objConnection as WinHttp.WinHttpRequest


(je suis pas sur du type, à vérifier)
 
 
ensuite une fonction Login qui renvoie une connection active


function Login(strLogin as string, strPassword as string) as WinHttp.WinHttpRequest


(faut accorder le type de retour de ta fonction avec celui de ta variable globale)
 
 
en gros ensuite dans les autres procédures tu va tester ta connection


 
'Si la connection est vide on l'initialise
If objConnection is nothing then
   Set objConnection = Login(frmLogon.txbLogin.Text, frmLogon.txtPassword.Text)
   'on reteste pour voir si la fonction à fonctionnée
   If objConnection is nothing then
       'Message d'erreur
       exit sub
   end if
end if
 
'la connection est bonne -> suite du traitement
 


 
 
c'est de l'approximatif mais ça devrait te donner des idées.
 

Reply

Marsh Posté le 04-11-2010 à 08:26:06    

OK, je vais tenter une approche de ce type dans la journée... je coise les doigts  :pt1cable:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed