首页 > 解决方案 > C# HTTPS 网站登录

问题描述

有一段时间我无法通过 HTTPS 协议登录网站。我尝试了各种方法,有些方法要么是请求变成了 GET,要么是我现在得到的。

我的代码:

        string credentials = "";
        string formParams = string.Format("username={0}&password={1}&remember=true", username, password);
        string cookieHeader;
        HttpWebRequest req = WebRequest.Create("https://account.mojang.com/login") as HttpWebRequest;
        req.ContentType = "application/x-www-form-urlencoded";
        req.SetRawHeader("Host", "account.mojang.com");
        req.SetRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0");
        req.SetRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        req.SetRawHeader("Accept-Language", "en - US, en; q = 0.5");
        req.SetRawHeader("Accept-Encoding", "gzip, deflate");
        req.SetRawHeader("Referer", "https://account.mojang.com/login");
        req.KeepAlive = false;
        req.SetRawHeader("Upgrade-Insecure-Requests", "1");
        System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
        req.ServicePoint.Expect100Continue = false;
        byte[] bytes = Encoding.ASCII.GetBytes(formParams);
        req.ContentLength = bytes.Length;
        req.Method = "POST";
        using (Stream os = req.GetRequestStream())
        {
            os.Write(bytes, 0, bytes.Length);
        }
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        cookieHeader = resp.Headers["Set-cookie"];
        if (resp.Headers["Set-cookie"].Contains("PLAY_SESSION")) { credentials = cookieHeader; }
        return resp.StatusCode.ToString() + Environment.NewLine + resp.Headers.ToString(); ;

结果当然应该是状态码和标头,包括 cookie,但我得到以下信息: 函数的输出

cookie 不会注册,rememberme cookie 也不会。我究竟做错了什么?我有一个项目的截止日期即将到来,因此我们将不胜感激。谢谢你的理解。

标签: c#postloginhttps

解决方案


我建议使用 HttpClient。另请注意,即使它是一次性的,您通常也应该在整个应用程序中使用相同的 HttpClient。请参阅: https ://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

        client.BaseAddress = new Uri("http://account.mojang.com");
        var content = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair<string, string>("username", username),
            new KeyValuePair<string, string>("password", password),
            new KeyValuePair<string, string>("remember", "true")
        });
        var result = await client.PostAsync("/login", content);
        string resultContent = await result.Content.ReadAsStringAsync();
        return result.Headers.ToString();

推荐阅读