Не могу получить куки с C # HttpClient - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь получить куки на странице входа в Spotify с помощью C # и класса HttpClient.Однако CookieContainer всегда пуст, когда я знаю, что куки устанавливаются.Я не отправляю никаких заголовков, но он все равно должен давать мне cookie-файлы, потому что когда я отправляю запрос GET без заголовков с python (модуль запросов), я получаю токен csrf.Вот мой код:

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Collections;
using System.Web;

class Program
{
    static void Main()
    {
        Task t = new Task(MakeRequest);
        t.Start();
        Console.WriteLine("Getting cookies!");
        Console.ReadLine();
    }

    static async void MakeRequest()
    {
        CookieContainer cookies = new CookieContainer();
        HttpClientHandler handler = new HttpClientHandler();

        handler.CookieContainer = cookies;
        Uri uri = new Uri("https://accounts.spotify.com/en/login/?_locale=en-US&continue=https:%2F%2Fwww.spotify.com%2Fus%2Faccount%2Foverview%2F");
        HttpClient client = new HttpClient(handler);
        var response = await client.GetAsync(uri);
        string res = await response.Content.ReadAsStringAsync();
        Console.WriteLine(cookies.Count);
        foreach (var cookie in cookies.GetCookies(uri)) {
            Console.WriteLine(cookie.ToString());
        }
    }
}

Мне кажется, это довольно просто, но программа всегда говорит, что есть 0 куки.Кто-нибудь знает, что происходит?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Необходимо разрешить использование файлов cookie, используя HttpClientHandler.UseCookies Свойство

public bool UseCookies { get; set; }

Получает или задает значение, указывающее, использует ли обработчик свойство CookieContainer для храненияфайлы cookie сервера и используют эти файлы cookie при отправке запросов.

//...

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
handler.UseCookies = true; //<-- Enable the use of cookies.

//...
0 голосов
/ 24 декабря 2018

Я попытался записать заголовки ответа в консоль с помощью Console.WriteLine (response.Headers), а заголовок Set-Cookie с токеном csrf был выведен на консоль.Таким образом, кажется, что HttpClient не считает куки в этом заголовке фактическими куки, поэтому не добавляет эти куки в CookieContainer.

...