2010-11-30 7 views
2

Je me connecte réellement dans mon univ au réseau via un portail captif à cette adresse https://secure.arubanetworks.com/cgi-bin/login, il y a longtemps, j'ai fait un programme pour s'y connecter qui a fonctionné parfaitement (C++ & libCurl), envoyant un HTTP POST avec la "chaîne de requête" nécessaire comme nom d'utilisateur et mot de passe, mais je pense que c'était parce qu'il n'y avait pas encore le SSL, un certificat X.509, qui semble maintenant fonctionner avec un GET au lieu du POST utilisé auparavant. Coller sur Firefox l'URL complète avec la chaîne de requête a fonctionné pour moi parfait, comme il se doit, donc j'ai juste essayé d'y parvenir dans un petit programme C#, mais puisque je ne sais pas quoi faire à propos du certificat (Je suppose qu'il doit y avoir un rapport avec ça ..: P) cela me jette un ProtocolError, et maintenant je pensais que je devrais comprendre un peu à ce sujet d'abord, donc je suis intéressé par le code pour y arriver, mais aussi la manière Ça marche. :)Connectez-vous au portail captif HTTPS

PS: J'aimerais aussi s'il y a un moyen de définir le compte ou le programme (exe) comme rappel, sur les propriétés de connexion (mon OS est Win7) afin qu'une fois connecté au réseau im authentifié. : D

Merci d'avance pour votre temps et aider les amis! ;)

 Uri uri = new Uri(url + "?" + postData); 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
     req.Method = this.method; 
     // ToDo: Something doesn't work with the cert auth I guess 
     req.Proxy = null; 
     req.Credentials = CredentialCache.DefaultCredentials; 
     ServicePointManager.ServerCertificateValidationCallback += 
     delegate(object sender, X509Certificate certificate, X509Chain chain, 
     SslPolicyErrors sslPolicyErrors) 
     { 
      return true; 
     }; 

     try 
     { 
      HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
      Stream responseStream = resp.GetResponseStream(); 
      StreamReader reader = new StreamReader(responseStream); 
      string responseFromServer = reader.ReadToEnd(); 
     } 
     catch (WebException e) 
     { 
      if (e.Status == WebExceptionStatus.ProtocolError) 
      { 
       HttpWebResponse response = e.Response as HttpWebResponse; 
       if (response != null) 
       { 
        Console.WriteLine(e.ToString()); 
       } 
      } 
     } 

Répondre

1

Essayez ceci pour un https GET. Pour référence, il est lié à mais plus simple que de faire un https POST.

Il y a une différence si vous avez besoin d'une approche asynchrone, mais je ne pense pas que ce soit ce dont vous avez besoin. Donc, vous utilisez toujours l'objet HttpWebRequest, mais il y a une différence après que vous arriviez au .method - tout ce dont vous avez besoin est de bourrer votre uri dans la requête, et récupérez la réponse. Je ne pense pas que vous devriez manuellement avoir à jouer avec le proxy ou les informations d'identification.

+0

mais comme je l'ai dit, la requête est faite à travers un GET, donc je ne devrais pas avoir .method = "GET"? et alors d'autres choses continueraient à fonctionner? – Dane411

+0

Si c'est un GET, alors vous n'aurez pas besoin du codage x-www-form. Et, tout ce que vous devez faire est de suivre l'exemple de réponse dans [ce post] (http://stackoverflow.com/questions/943852/how-to-send-an-https-get-request-in-c). – zanlok

+0

merci, je vais essayer cela tous les deux dès que possible (peut-être pas jusqu'au 13ème, puisque je dois être à l'univ pour se connecter) et ensuite rapporter le résultat! ;) – Dane411