c# wordpress требует cookie для авторизации

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by WantToBePro, 5 Oct 2020.

  1. WantToBePro

    WantToBePro Member

    Joined:
    18 May 2020
    Messages:
    48
    Likes Received:
    12
    Reputations:
    0
    Здравствуйте!
    Пытаюсь залогиниться в блоге на wordpress, отправляю POST запрос, использую HttpClient

    Code:
      var baseAddress = new Uri(url + @"/wp-admin/");
                    var cookieContainer = new CookieContainer();
                    using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer, AllowAutoRedirect = true })
                    using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
                    {
                      
                        client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0;");
                        client.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
                        client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded");
                        client.DefaultRequestHeaders.TryAddWithoutValidation(":method", "POST");
                        
                        var content = new FormUrlEncodedContent(new[]
                        {
                          new KeyValuePair<string, string>("log",  "admin"),
                          new KeyValuePair<string, string>("pwd",  "admin"),
                          new KeyValuePair<string, string>("wp-submit", "Войти"),
                          new KeyValuePair<string, string>("redirect_to", url+ @"/wp-admin/"),
                          new KeyValuePair<string, string>("testcookie", "1"),
        });
                          var result = await client.PostAsync(url + @"/wp-admin/", content);
                        result.EnsureSuccessStatusCode();
                        string contents = await result.Content.ReadAsStringAsync();
                        

    Получаю ответ:

    Code:
    < html >
    < head >
    < script > f
    unction set_cookie()
    {
        var now = new Date();
        var time = now.getTime();
        time += 19360000 * 1000;
        now.setTime(time);
        document.cookie = 'beget=begetok' + ';
    expires = '+now.toGMTString()+';
        path =/ ';}set_cookie();
    location.reload();
        ;</ script >
        </ head >
        < body >
        </ body >
        </ html >
    Как я понимаю скрипт устанавливает куки "beget=begetok" и перезагружает страницу.
    Пробовал передать куки (не помогло):
    Code:
    cookieContainer.Add(baseAddress, new Cookie("beget", "begetok"));
    Какое может быть решение?
    Спасибо!
     
  2. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,108
    Likes Received:
    8,496
    Reputations:
    25
    Взять ваершарк, перехватить запросы от Фаерфокса а потом запросы от этой твоей тулзы.
    Сравнить. Найти отличия.

    UPD: Может быть в самом деле не хватает expires, тогда его можно не считать а точно так же скопировать для пробы прямо из запроса Огнелиса.
     
    Suicide likes this.
  3. look2009

    look2009 Member

    Joined:
    3 Jun 2009
    Messages:
    80
    Likes Received:
    63
    Reputations:
    5
    По сути нужно максимально эмулировать запрос браузера, т.к. иначе полоучается как здесь, гадание на кофейной гуще, если нет желания эмулировать полностью запрос, то тут остаётся рулетка чего хватит, а ЧЕГО НЕ ХВАТАЕТ, смотри, что POST браузер отправляет, ищи где что генерируется, и вперёд. И будет счастье, не просто так, некоторые JS куки вешают, а ещё и генерющий код обфусцирут, не от сладкой жизни. Как говорится борьба инь-янь.
     
  4. WantToBePro

    WantToBePro Member

    Joined:
    18 May 2020
    Messages:
    48
    Likes Received:
    12
    Reputations:
    0
    Уже разобрался, не отправлял все нужные заголовки