Ввод капчи при авторизации ВК (C#, xNet)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ackois1, 19 Oct 2017.

  1. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Приветствую.

    Возникла проблема с прохождением проверки на робота при авторизации вк.

    Делаю вот что:
    Code:
    public void AuthVK(string login, string pass)
            {
                using (var request = new HttpRequest())
                {
                    cookie = new CookieDictionary(false);
                    request.UserAgent = Http.ChromeUserAgent();
                    request.Cookies = cookie;
    
                    // С главной страницу парсю action
                    // action == https://login.vk.com/?act=login&_origin=https://m.vk.com&ip_h=ip_h&lg_h=lg_h&role=pda&utf8=1
                    string html = request.Get("https://m.vk.com/").ToString();
                    string action = html.Substring("action=\"", "\"");
                    var reqParams = new RequestParams();
                    reqParams["email"] = login;
                    reqParams["pass"] = pass;
    
                    // Отправляю запрос на авторизацию
                    html = request.Post(action, reqParams).ToString();
    
                    // Если вылезла капча
                    if (html.Contains("captcha"))
                    {
                        // Парсю новый action
                        action = html.Substring("action=\"", "\"");
    
                        // парсю sid и сохраняю капчу на комп
                        string sid = html.Substring("captcha_sid\" value=\"", "\"");
                        request.Get("https://m.vk.com/captcha.php?s=0&sid=" + sid).ToFile(@"captcha.jpg");
    
                        // Тут забиваю код капчи вручную прямо во время отладки
                        string captcha_key = "";
    
                        // Отправлю запрос с новым action, разгаданным кодом и sid
                        html = request.Get(action + "&captcha_key=" + captcha_key + "&captcha_sid=" + sid + "&email=" + login + "&pass=" + pass).ToString();
                    }
                    html = request.Get("https://vk.com/id0").ToString();
                }
    После чего контакт просит ввести новую капчу
    Есть предположение, что после первого запроса на авторизацию контакт дает одну капчу, а когда я пытаюсь скачать картинку на комп - уже другую, т.к. при переходе по url капчи она каждый раз меняется. Если так, подскажите, пожалуйста, как мне выгрузить картинку сразу после первого запроса?
     
    #1 ackois1, 19 Oct 2017
    Last edited: 19 Oct 2017
  2. SooLFaa

    SooLFaa Members of Antichat

    Joined:
    17 Mar 2014
    Messages:
    530
    Likes Received:
    499
    Reputations:
    154
    А зачем ты снова идешь по урлу?
    Ты здесь уже получил ответ именно с нужеой тебе картинкой
    Code:
      html = request.Post(action, reqParams).ToString();
    Распарси и дёрну оттуда все <img>
    Следующий совет отследи авторизацию в вк и посомтри на каком этапе летит request на каптчу.
     
    _________________________
  3. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Возьми пустой Firefox, поставь плагин TamperData, и отследи запросы и все данные, которые происходят при авторизации.
    Как указали выше - просто сохраняй капчу из нужного тэга img, но может быть вариант, когда ты будешь снова слать запрос на урл капчи, сервер выдаст тебе уже совсем другую картинку. Как самый простой и топорный вариант - делай это все в браузере, куда эта капча загрузится, и тяни ее уже оттуда.