HttpClient не отправляет файлы cookie из CookieContainer, даже если они небезопасны. - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь войти на сайт. Для этого мне нужно загрузить его домашнюю страницу, а затем отправить запрос POST с некоторыми параметрами (включая логин + пароль) и куки, которые я получаю в первом ответе. Но файлы cookie не отправляются обратно на сервер. Я обнаружил, что безопасные файлы cookie не могут быть отправлены обратно. Но они не отправляют, даже если они небезопасны.

    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.ReadAsByteArrayAsync().ContinueWith(_content =>
        {
            content = Encoding.GetEncoding("windows-1251").GetString(_content.Result, 0, _content.Result.Length);
        }
    ).Wait();
    cookies = handler.CookieContainer.GetCookies(new Uri("https://login.website.com/?act=login"));
    
    foreach (Cookie cookie in cookies)
    {
        handler.CookieContainer.Add(new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain)); // Make cookies unsecure
    }
                
    Console.WriteLine("Cookie count: {0}", cookies.Count); // Writes right number
    
    httpClient.PostAsync("https://login.website.com/?act=login", new FormUrlEncodedContent(postcontent.ToArray())).ContinueWith(_content =>
    {
        Console.WriteLine("test: {0}", _content.Result);
        hresponse = _content.Result;
    }).Wait();
...