Пытаюсь написать программу для парсинга неких данных с сайта, с парсингом проблем быть не должно, но от авторизации уже голова болит. Не пойму что я упускаю. 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;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как получить байтовый массив из запросаНапример есть следующий код на java:
Перечитываю о пространстве имён и сборке и что-то зацепился за эти слова
Я хочу сделать такесть две программы(на разных пк), у одной есть кнопка при нажатие на которую отправлялся event(пакет) другому пользователю,...
Вопрос, пожалуй, нубский однако ответа на просторах интернета я к сожалению не нашелЯ разрабатываю десктопное приложение на C#, которое автоматизирует...