Получить друзей с параметрами ВКонтакте

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ackois1, 20 Feb 2016.

  1. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Приветствую.
    В общем требуется программно получить id друзей определенного пола, возраста и города.
    Раньше это делалось очень просто: отправляем POST-запрос, в котором указываем требуемые параметры, в ответе получаем список id. Буквально пару дней назад это работало. В сниффере и сейчас все приходит нормально, а вот в программе ответ теперь приходит без idшников. Хотя я полностью имитирую запрос.
    Подскажите, в чем может быть дело?

    Upd: обнаружил, что на других компьютерах такой проблемы нет, стало быть дело в моем.
     
    #1 ackois1, 20 Feb 2016
    Last edited: 24 Feb 2016
  2. Mrgun

    Mrgun New Member

    Joined:
    20 Feb 2016
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Какими средствами выполняется запрос? Возможно вам нужны SSL-библиотеки в папку с программой
     
  3. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Не знаю, с чем это было связано. На других компьютерах программа работала корректно. Может подхватил фигню какую-то. В общем, после отката системы все вновь заработало и на моем. Запрос отправляю через элемент управления webbrowser.
     
  4. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Проблема все еще имеет место. Я пробовал полностью имитировать запрос из хрома, вместе со всеми заголовками, но на одних компьютерах ответ приходит с IDами, а на других - без. Аккаунт один, ОС одна. С чем тогда это может быть связано?

    Должно быть:
    Приходит:
     
    #4 ackois1, 24 Feb 2016
    Last edited: 26 Feb 2016
  5. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    5 - Авторизация пользователя не удалась. Убедитесь, что Вы используете верную схему авторизации. (c) vkapi
     
  6. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Так тут же не используется апи. Там вообще нет метода, возвращающего именно друзей с параметрами. Так бы и проблемы не было :)
    Я имитирую запрос, который отправляется, когда на странице "мои друзья" выбираются нужные параметры (менюшка справа). В postdata передаются эти параметры и id юзера, чьи друзья нужны.
    Авторизация проходит в самом webbrowser'е. Без нее возвращается что-то вроде:
    Может, дело в самом IE?

    P.S. через GET запрос - ситуация аналогичная.
     
    #6 ackois1, 26 Feb 2016
    Last edited: 26 Feb 2016
  7. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    код показывай, гадать я еще не особо научился :)
     
  8. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Да, чет не подумал :)

    Функция отправляет post запрос и дожидается полной загрузки страницы, записывает ее исходник в html
    Code:
    void GotoPost(string url, string st, byte[] postdata, string head)
            {
                html = null;
                webBrowser1.Navigate(url, st, postdata, head);
                while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                {
                    Application.DoEvents();
                }
                Encoding enc = Encoding.GetEncoding("windows-1251");
                Stream stream = webBrowser1.DocumentStream;
                StreamReader sr = new StreamReader(stream, enc);
                html = sr.ReadToEnd();
                stream.Close();
            }
    
    Вызов из другой функции.
    ageFrom, ageTo, town, sex, userId передаются как аргументы
    Code:
    GotoPost("http://vk.com/friends", "_self", Encoding.ASCII.GetBytes("act=filter_friends&age_from=" + ageFrom + "&age_to=" + ageTo + "&al=1&city=" + town + "&sex=" + sex + "&uid=" + userId), "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36");
    После этого в html должна быть строка:
    Дальше я уже из нее беру IDы :)
     
    #8 ackois1, 26 Feb 2016
    Last edited: 26 Feb 2016
  9. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    в шарпах (или что это) я не в зуб ногой, но мне кажется, что ты забываешь отправлять куки вместе с юзерагентом
     
  10. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    да, это шарп :)

    Webbrowser в .NET - это такой мини Internet Explorer, все заголовки и куки там передаются автоматически. В этом плане - удобная вещь, но память жрет, как активная вкладка. Юзер-агент я подменяю, дабы ответ всегда был одинаковый. А то контакт для разных версий IE отдает разные строки. Так что тут в другом дело :)
     
    #10 ackois1, 27 Feb 2016
    Last edited: 27 Feb 2016
  11. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    я хз кароче. когда мне нужны друзья по критериям, я делаю не очень просто: авторизуюсь на апи, получаю всех друзей с friends.get'ом с параметрами fields=sex,bdate,city,country,has_mobile,contacts,education,online...и тд, и выбираю из массива нужных мне людей из города 1, скажем. или тех кто онлайн. или тех, чей год рождения больше 1950, но меньше 1970. или сразу со всеми параметрами :)
     
    ackois1 likes this.
  12. ackois1

    ackois1 New Member

    Joined:
    25 Jan 2016
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Тоже себе вариант, но если требуется выборка только по полу, возрасту и городу, то рациональнее один запрос отправить, и контакт все сделает сам :)
    Но почему-то на одних компах ответ приходит с идами, а на других - без. Сначала на моем компе прога перестала IDы получать. Сидел, ковырялся, и хоть тресни - не работает. Откатил систему - все вновь парсится корректно. Ниче, вроде, не ставил, не удалял. А щас узнал от пользователей, что у кого-то работает, у кого-то - нет. И хрен знает, с чем это связано. Какая-то странная дичь происходит :)
     
    #12 ackois1, 27 Feb 2016
    Last edited: 28 Feb 2016