Почему нельзя авторизоваться на сайте, используя токен с C#? - PullRequest
0 голосов
/ 03 мая 2020

Я успешно использую этот код для другого сайта, но без маркера в данных поста. На этом сайте я получаю страницу входа в качестве ответа.

        private void button1_Click(object sender, EventArgs e)
        {
            var client = new CookieAwareWebClient();

            string resp = client.DownloadString("https://www.chess.com/login_check");


            string token = Regex.Match(resp, "_token.+?value=\"(.+?)\"").Groups[1].Value;


            client.UseDefaultCredentials = true;
            client.BaseAddress = @"https://www.chess.com/login/";

            var loginData = new NameValueCollection();
            loginData.Add("_username", "MYEMAIL");
            loginData.Add("_password", "MYPASS");
            loginData.Add("login", "");
            loginData.Add("_target_path", "https://www.chess.com/");
            loginData.Add("_token", token);
            var result = client.UploadValues(@"https://www.chess.com/login_check", "POST", loginData);

            string response = System.Text.Encoding.UTF8.GetString(result);
        }

И это код для веб-клиента.

        public class CookieAwareWebClient : WebClient
        {
            private CookieContainer cookie = new CookieContainer();

            protected override WebRequest GetWebRequest(Uri address)
            {
                HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
                request.ProtocolVersion = HttpVersion.Version10;
                if (request is HttpWebRequest)
                {
                    (request as HttpWebRequest).CookieContainer = cookie;
                }
                return request;
            }
        }
...