HttpClient не отправляет куки из CookieContainer, даже если secure=false
Пытаюсь авторизоваться через веб-версию ВКонтакте. Для этого я гружу страницу авторизации и отправляю POST-запрос, в котором должен быть логин-пароль, некоторые хеши, а также куки. Если с параметрами проблем нет, то куки не хотят отправляться.
static HttpResponseMessage sendRequest(HttpClient client, Uri url)
{
var response = new HttpResponseMessage();
client.GetAsync(url).ContinueWith(responseTask =>
{
response = responseTask.Result;
}).Wait();
return response;
}
static void Main(string[] args)
{
var baseAddress = new Uri("https://vk.com");
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var cookieContainer = new CookieContainer();
var handler = new HttpClientHandler { CookieContainer = cookieContainer };
HttpClient httpClient = new HttpClient(new LoggingHandler(handler));
httpClient.DefaultRequestHeaders.Accept.ParseAdd(accept);
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(uagent);
var hresponse = sendRequest(httpClient, baseAddress);
Console.WriteLine("Response: {0}", hresponse.Headers);
var cookies = handler.CookieContainer.GetCookies(baseAddress);
Console.WriteLine("Cookie count: {0}", cookies.Count);
string content = "";
hresponse.Content.ReadAsStringAsync().ContinueWith(_content =>
{
content = _content.Result;
}).Wait();
cookies = handler.CookieContainer.GetCookies(new Uri("https://login.vk.com/?act=login"));
foreach (Cookie cookie in cookies)
{
handler.CookieContainer.Add(new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain)); // Пересоздать куки для Secure = false
}
Console.WriteLine("Cookie count: {0}", cookies.Count); // Выводит нормальное число куки
httpClient.PostAsync("https://login.vk.com/?act=login", new FormUrlEncodedContent(postcontent.ToArray())).ContinueWith(_content =>
{
Console.WriteLine("test: {0}", _content.Result);
hresponse = _content.Result;
}).Wait();
}
Upd. Нашёл полу-решение добавить заголовок Cookie со всеми куками.
string cookieheader = "";
foreach (Cookie cookie in cookies)
{
cookieheader += String.Format("{0}={1}; ", cookie.Name, cookie.Value);
}
httpClient.DefaultRequestHeaders.Add("Cookie", cookieheader);
upd2. Посмотрел трафик через BurpSuite, оказалось, что куки отправляются, а логгер этого не пишет.