2010-11-30 15 views
2

私は実際にこのURLのキャプティブポータルを介してネットワークに接続していますhttps://secure.arubanetworks.com/cgi-bin/login、これまでに完全な(C++ & libCurl)に接続するプログラムを作りました。ユーザー名やパスワードなどの「クエリ文字列」が必要ですが、以前は使用していたPOSTの代わりにGETで動作するように見えるSSL、X.509 Certがまだなかったためだと思います。HTTPSのキャプティブポータルにログイン

Firefox上に貼り付けると、クエリ文字列の完全なURLが私にとって完璧でした。ちょっとしたC#プログラムでそれを達成しようとしましたが、証明書について何をすべきかわからないので私はそれをするためには頭が良いはずです。:P)それは私にProtocolErrorを投げます、そして、私は最初にそれについて少し理解するべきだと思ったので、私はそれを達成するコードに興味がありますできます。 :)

PS:アカウントやプログラム(exe)をコールバックとして、接続プロパティ(my OSはWin7)に設定すると、一度ネットワークに接続すれば即座に認証されます。 :D

あなたの時間と助けの仲間に事前に感謝! ;)

 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()); 
       } 
      } 
     } 

答えて

1

https GETでこれを試してください。参考までに、https POSTを行うよりも簡単です。

非同期アプローチが必要な場合は違いがありますが、それはあなたが必要と考えるものではありません。だから、まだHttpWebRequestオブジェクトを使用していますが、.methodにアクセスした後に違いがあります。必要なのは、uriをリクエストに埋め込んで応答を取得することだけです。私はあなたが手動でプロキシや資格情報を混乱させる必要があるとは思わない。

+0

私は言ったように、リクエストはGETを通じて行われるので、私は.method = "GET"を持ってはいけませんか?それから他のものはまだ動作し続けますか? – Dane411

+0

GETの場合、x-www-form-encodedは必要ありません。そして、あなたがする必要があるのは、[この投稿](http://stackoverflow.com/questions/943852/how-to-send-an-https-get-request-in-c)のサンプル回答に従ってください。 – zanlok

+0

ありがとう、私はこの両方をしようとする(おそらく13日まで、私は接続するUnivにする必要があります)し、結果を報告する! ;) – Dane411

関連する問題