Automatisation de l'authentification web en cocoa

objectiveyannobjectiveyann Membre
22:34 modifié dans API AppKit #1
Bonjour a tous, étant technicien Apple et développeur a mes heures, j'aimerais créer un logiciel qui permet d'afficher la page de garantie d'une machine Apple en possédant son numéro de série.

Le site pour vérifier la garantie est : gsx.apple.com mais il demande une authentification (comme un compte gmail ou autre), j'aimerais que mon logiciel passe l'authentification sans rien demander a l'utilisateur (l'utilisateur aura rentré son user et mot de passe dans les préférences de celui ci), et qu'il affiche directement la page de garantie.

Donc ma question est : comment automatiser l'authentification web en objective c et cocoa, je vais utiliser une webview. Je ne vous cache pas, que je n'ai aucune idée de comment cela pourrais fonctionner. 

Merci beaucoup pour votre aide. Yann.

Réponses

  • BruBru Membre
    22:34 modifié #2
    Il y a 2 choses différentes dans ce que tu veux faire :
    1. une méthode de "connexion/identification".
    2. une méthode d'affichage du "résultat final" (la page de garantie).

    Pour le second point, en effet, WebView est ce qu'il te faut.

    Pour le premier point, cela peut se faire via des requêttes http.
    Une première requête te permet de récupérer le contenu html de la page gsx.apple.com.
    Ensuite, un parsing permettra de récupérer l'adresse http d'envoi du formulaire d'identification et les noms des 3 ou 4 <INPUT> à  joindre à  cette adresse.
    C'est cette adresse qui sera envoyée au webView.

    .
  • objectiveyannobjectiveyann Membre
    22:34 modifié #3
    Merci beaucoup, j'essaye de regarder ca.
  • BruBru Membre
    22:34 modifié #4
    Il y a aussi une autre méthode : l'accès au DOM du webview en cocoa.
    En fait, il s'agit d'accéder à  chaque élément html du document dans le webview pour en modifier les attributs et pour y déclencher des méthodes.

    Ici, il s'agit de modifier l'attribut value des 2 balises INPUT contenant l'identifiant et le mot de passe, puis de soumettre le formulaire au serveur.

    Un exemple de ce que tu veux faire :
    <br />#import &quot;Contoleur.h&quot;<br />#import &lt;WebKit/WebKit.h&gt;<br /><br />@interface Contoleur(decla)<br />&nbsp;  BOOL formSoumis;<br />@end<br /><br />@implementation Contoleur<br /><br />- (void)awakeFromNib<br />{<br />&nbsp;  // le formulaire d&#39;identification n&#39;a pas encore été soumis<br />&nbsp;  formSoumis=NO;<br /><br />&nbsp;  // chargement du site gsx.apple.com<br />&nbsp;  [[webview mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@&quot;http://gsx.apple.com&quot;]]];<br />}<br /><br />- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame<br />{<br />&nbsp;  DOMDocument *docHtml;<br />&nbsp;  DOMNodeList *listeHtml;<br />&nbsp;  DOMNode *inputIden, *inputPasse, *form;<br /><br />&nbsp;  // formulaire d&#39;identification déjà  soumis : on ne fait rien<br />&nbsp;  if (formSoumis) return;<br /><br />&nbsp;  // initialisation<br />&nbsp;  inputIden=nil;<br />&nbsp;  inputPasse=nil;<br />&nbsp;  form=nil;<br /><br />&nbsp;  // récupération du contenu html (au format DOM)<br />&nbsp;  docHtml=[frame DOMDocument];<br /><br />&nbsp;  // recherche de la balise INPUT de l&#39;identifiant<br />&nbsp;  listeHtml=[docHtml getElementsByName:@&quot;theAccountName&quot;];<br />&nbsp;  if ([listeHtml length]&gt;0) inputIden=[listeHtml item:0];<br /><br />&nbsp;  // recherche de la balise INPUT du mot de passe<br />&nbsp;  listeHtml=[docHtml getElementsByName:@&quot;theAccountPW&quot;];<br />&nbsp;  if ([listeHtml length]&gt;0) inputPasse=[listeHtml item:0];<br /><br />&nbsp;  // recherche de la balise FORM du formulaire d&#39;identification<br />&nbsp;  listeHtml=[docHtml getElementsByTagName:@&quot;form&quot;];<br />&nbsp;  if ([listeHtml length]&gt;0) form=[listeHtml item:0];<br /><br />&nbsp;  // test si les 3 balises sont trouvées<br />&nbsp;  if (inputIden &amp;&amp; inputPasse &amp;&amp; form)<br />&nbsp;  {<br />&nbsp; &nbsp; &nbsp; // mise en place de l&#39;identifiant et du mot de passe<br />&nbsp; &nbsp; &nbsp; [inputIden setAttribute:@&quot;value&quot; :@&quot;identifiant&quot;];<br />&nbsp; &nbsp; &nbsp; [inputPasse setAttribute:@&quot;value&quot; :@&quot;passe&quot;];<br /><br />&nbsp; &nbsp; &nbsp; // le formulaire d&#39;identification est soumis<br />&nbsp; &nbsp; &nbsp; formSoumis=YES;<br /><br />&nbsp; &nbsp; &nbsp; // soumission du formulaire<br />&nbsp; &nbsp; &nbsp; [form submit];<br />&nbsp;  }<br />}<br />@end<br />
    

    Le webview se nommewebview, et le controleur si dessus est delegate de ce webview.

    .
  • objectiveyannobjectiveyann Membre
    22:34 modifié #5
    Vraiment un gros merci à  toi Bru, vraiment un super exemple, tu m'as fait gagner beaucoup de temps  o:) . J'aimerais pouvoir te rendre la pareil, donc si tu as une question technique (matériel ou logiciel) sur les mac n'hésite pas.

    Je ne sais pas si ce logiciel intéressera du monde de ce forum, il est plutôt accès pour les techniciens Apple. Pour gagner du temps pour les vérifications de garanties et pour imprimer la page de garantie avec l'historique des réparations.

    Faites moi savoir si cela vous intéresse et quelles options vous aimeriez y inclure.


Connectez-vous ou Inscrivez-vous pour répondre.