C # HttpClient Не удалось проверить предоставленный токен CSRF по запросу POST - PullRequest
0 голосов
/ 07 мая 2018

Я пишу здесь, потому что я пытался отправить запрос POST на сервер API,
Я попытался отправить еще один запрос (первый) и из ответа он работает ({"success":"true", "role":"USER"}). Но во втором запросе в ответ я получаю: {"timestamp":1524589409895,"status":403,"error":"Forbidden","message":"Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'.","path":"/api/v1/rec"}.
Поэтому я поместил все куки, но один из них «XSRF -TOKEN» вызывает сбой моей программы System.Net.CookieException: The 'Name'='XSRF -TOKEN' part of the cookie is invalid
поэтому я обнаружил, что этот файл cookie меняется каждый раз, когда вы создаете сеанс
поэтому я попытался получить куки из ответа первого сообщения и добавил в заголовок для второго, и это результат

Я также установил NETFramework на версию 4.5
Я оставляю вам временную учетную запись, чтобы вы могли попробовать это, не создавая учетную запись только для теста
Запросить полезную нагрузку от firefox

static void Main(string[] args)
{
    Uri uri = new Uri("https://www.vcast.it/api/v1/rec");
    cookieContainer = new CookieContainer();
    cookieContainer.Add(uri, new Cookie("CONSENT", "true"));
    cookieContainer.Add(uri, new Cookie("_ga", "GA1.2.940742918.1524584758"));
    cookieContainer.Add(uri, new Cookie("_gid", "GA1.2.1691132054.1524584758"));
    cookieContainer.Add(uri, new Cookie("remember-me", "Z1hvUnJoOHdIM3dCZ2pmYXVKamFRUT09OkpxSXUzRDVRUXd6UG14eGlVUlJMOXc9PQ"));

    clienthandler = new HttpClientHandler { AllowAutoRedirect = true, UseCookies = true, CookieContainer = cookieContainer };
    client = new HttpClient(clienthandler);
    client.DefaultRequestHeaders.Host = "www.vcast.it";

    MainAsync();
}
private static CookieContainer cookieContainer;
private static HttpClientHandler clienthandler;
private static HttpClient client;

static async void MainAsync()
{
    Uri uri = new Uri("https://www.vcast.it");
    var values = new Dictionary<string, string>
    {
       { "username", "XXXX" },
       { "password", "XXXX" },
       { "remember-me", "undefined" },
       { "submit", "" }
    };
    var content = new FormUrlEncodedContent(values);
    HttpResponseMessage response = await client.PostAsync("https://www.vcast.it/apiLogin?appId=58aef0c4ea5d52b2c0e4f2ed", content);
    Console.WriteLine(await response.Content.ReadAsStringAsync());

    Console.WriteLine("New Cookies:");
    var responseCookies = cookieContainer.GetCookies(uri).Cast<Cookie>();
    foreach (var cook in responseCookies)
    {
        cookieContainer.Add(uri, cook);
        Console.WriteLine(cook.Name + ":" + cook.Value);
    }

    Console.WriteLine();
    clienthandler = new HttpClientHandler { UseCookies = true, CookieContainer = cookieContainer };
    client = new HttpClient(clienthandler);

    values = JsonConvert.DeserializeObject<Dictionary<string, string>>("{\"name\":\"Titolo registrazione\",\"fromSuggestion\":false,\"manual\":true,\"followSeries\":false,\"resolution\":\"r576\",\"format\":\"MP4\",\"defaultProvider\":\"vcloud\",\"provider\":\"vcloud\",\"channelId\":\"58138235c9e77c00018242ed\",\"startDate\":1524585300000,\"endDate\":1524588900000,\"startHour\":17,\"startMinute\":55,\"endHour\":18,\"endMinute\":55}");
    content = new FormUrlEncodedContent(values);
    client.DefaultRequestHeaders.Referrer = new Uri("https://www.vcast.it/manualRec/");
    response = await client.PostAsync("https://www.vcast.it/api/v1/rec", content);

    Console.WriteLine(await response.Content.ReadAsStringAsync());
}

Я с удовольствием приму любой комментарий или ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...