c# - 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 也不会。我究竟做错了什么?我有一个项目的截止日期即将到来,因此我们将不胜感激。谢谢你的理解。
解决方案
我建议使用 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();
推荐阅读
- typescript - dtslint 失败,因为 DefinitiveTyped 中的依赖
- reactjs - 从 react-navigation v1 迁移到 v3.11 时遇到问题
- hive - Hive - 仅支持 1 个子查询表达式
- r - ft_tokenizer 将单词标记为更低,我希望它保持原样
- ios - 无法更新 App Store 中的现有 App
- javascript - 为什么我的推送通知仅在我有 Alert() 时才起作用;
- angular - 从服务器下载文件返回无效的 CSRF 令牌
- javascript - 用R自动读取用javascript编写的动态表的内容
- sql - 基于一列组合具有不同列数的多个表
- android - Android-Q 中的地理围栏创建错误-“com.google.android.gms.common.api.ApiException: 13”