登录HTTPS强制门户网站

时间:2010-11-30 18:50:25

标签: c# ssl

我实际上通过这个url https://secure.arubanetworks.com/cgi-bin/login的强制网络连接我的univ到网络,不久前我创建了一个连接到它的程序,它完美无缺(C ++和libCurl),发送HTTP POST与所需的“查询字符串”,如用户名和密码,但我认为这是因为还没有SSL,X.509证书,现在似乎可以使用GET而不是之前使用的POST。

在Firefox上粘贴带有查询字符串的完整网址对我来说是完美的,因为它应该如此,所以我只是尝试在一个小C#程序中实现这一点,但因为我不知道如何处理该证书(我asume必须有smth来处理它...:P)它抛出一个ProtocolError,现在我认为我应该首先了解它,所以我对代码实现它感兴趣,但它的方式也是如此作品。 :)

PS:如果有一种方法可以将连接属性(我的操作系统是Win7)设置为帐户或程序(exe)作为回调,那么一旦连接到网络即可进行中等身份验证。 :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 个答案:

答案 0 :(得分:1)

尝试使用https GET。作为参考,它与执行https POST相关但更简单。

如果您需要异步方法,那就有区别了,但我认为这不是您所需要的。所以,你仍然使用HttpWebRequest对象,但是在你到达.method之后会有所不同 - 所有你需要的就是将你的uri填入请求中,然后获取响应。我认为您不应该手动需要使用代理或凭据。