Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1311 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Instanciation d'un Object + Compatibilité MacOS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Instanciation d'un Object + Compatibilité MacOS

n°2033816
fredp69
Posté le 03-11-2010 à 15:47:36  profilanswer
 

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:

mood
Publicité
Posté le 03-11-2010 à 15:47:36  profilanswer
 

n°2033870
Xxxaaavvv
Posté le 03-11-2010 à 18:19:47  profilanswer
 

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...
 

n°2033887
fredp69
Posté le 03-11-2010 à 19:40:19  profilanswer
 

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

n°2033897
Xxxaaavvv
Posté le 03-11-2010 à 20:54:56  profilanswer
 

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.
 

n°2033940
fredp69
Posté le 04-11-2010 à 08:26:06  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Instanciation d'un Object + Compatibilité MacOS

 

Sujets relatifs
Problème de décalage et de compatibilité[JavaScript] Pb compatibilité avec Chrome (page vierge affichée)
CSS / Compatibilité IE - FirefoxCompatibilité avec Androïd
[Resolu] Probléme de compatibilité entre Firefox et Internet ExplorerControle du son balise <object>
Cloner un objectinstanciation des classes
[resolu]compatibilité ie6 ie7 mais bug anim flash 
Plus de sujets relatifs à : Instanciation d'un Object + Compatibilité MacOS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR