有一段时间,我无法通过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),但是我得到以下信息: The output from the function
该cookie不会注册,记住我的cookie也不会注册。我究竟做错了什么?我有一个截止日期即将到来的项目,因此我们将不胜感激。谢谢您的理解。
答案 0 :(得分:0)
我建议使用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();