Авторизация с __RequestVerificationToken и cookie

214
20 октября 2019, 07:50

Пытаюсь написать программу для парсинга неких данных с сайта, с парсингом проблем быть не должно, но от авторизации уже голова болит. Не пойму что я упускаю. 1) спарсил __RequestVerificationToken с сайта 2) получил cookie __RequestVerificationToken (два разных значения) 3) отправляю запрос авторизации (токен, cookie, логин, пароль) на адрес "https://id.bookatable.com/en-GB?returnUrl=https://erb.bookatable.com/booking-manager/en-GB" по идее должен получить ещё куки но их нет, как быть?

    public async Task<string> Login (CancellationToken ct)
        {
            string data; // declaring variables
            var baseAddress = new Uri("https://id.bookatable.com");
            var loginUrl = "en-GB?returnUrl=https://erb.bookatable.com/booking-manager/en-GB";
            var getDataUrl = "/BookingManager/getTablePlanWithBookingsFor?";
            var cookieContainer = new CookieContainer();
            using (var handler = new HttpClientHandler { CookieContainer = cookieContainer })
            using (HttpClient client = new HttpClient(handler) { BaseAddress = baseAddress })
            {
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
                ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
                try
                {
                    HttpResponseMessage response = client.GetAsync("https://id.bookatable.com/en-GB?returnUrl=https://erb.bookatable.com/booking-manager/en-GB").Result;
                    if (response.EnsureSuccessStatusCode().StatusCode.ToString().ToLower() == "ok")
                    {
                        HttpHeaders headers = response.Headers;
                        IEnumerable<string> values;
                        if (headers.TryGetValues("Set-Cookie", out values))
                        {
                            cookie = values.First().Substring(27, 108);
                        }
                        cookieContainer.Add(baseAddress, new Cookie(name, cookie));
                        string responseBody = "";
                        using (HttpContent content = response.Content)
                        {
                            Task<string> result = content.ReadAsStringAsync();
                            responseBody = result.Result;
                            string patternRegion = "value=\"([^\"]*)\"";
                            RegexOptions regexOptions = RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled;
                            Regex reg = new Regex(patternRegion, regexOptions);
                            MatchCollection mc = reg.Matches(responseBody);
                            foreach (Match m in mc)
                            {
                                var hidRequestVerificationToken = m.Value;
                                token = hidRequestVerificationToken.Substring(8, 108);
                                break;
                            }
                        }

                        var loginData = new FormUrlEncodedContent(new[]
{                       new KeyValuePair<string, string>(name, token),
                        new KeyValuePair<string, string>("Email", "login"),
                        new KeyValuePair<string, string>("Password", "password")
                        });
                        var result2 = await client.PostAsync(loginUrl, loginData, ct);
                        var responceCookies = cookieContainer.GetCookies(new Uri("https://id.bookatable.com/en-GB?fromPlatform=true")).Cast<Cookie>();
                        var bytes = await result2.Content.ReadAsByteArrayAsync();
                        Encoding encoding = Encoding.GetEncoding("utf-8");
                        data = encoding.GetString(bytes, 0, bytes.Length);
                        result2.EnsureSuccessStatusCode();

                    }
                }

                catch (HttpRequestException ex)
                {
                }
                return null;
            }
        }
READ ALSO
Перенос кода из java на c#

Перенос кода из java на c#

Как получить байтовый массив из запросаНапример есть следующий код на java:

131
В чём разница между сборкой и библиотекой?

В чём разница между сборкой и библиотекой?

Перечитываю о пространстве имён и сборке и что-то зацепился за эти слова

132
Удалённое взаимодействие с пк с#

Удалённое взаимодействие с пк с#

Я хочу сделать такесть две программы(на разных пк), у одной есть кнопка при нажатие на которую отправлялся event(пакет) другому пользователю,...

109
Может ли SQLite делать бэкап на сервер SQL Server?

Может ли SQLite делать бэкап на сервер SQL Server?

Вопрос, пожалуй, нубский однако ответа на просторах интернета я к сожалению не нашелЯ разрабатываю десктопное приложение на C#, которое автоматизирует...

122