Приветствую. В общем требуется программно получить id друзей определенного пола, возраста и города. Раньше это делалось очень просто: отправляем POST-запрос, в котором указываем требуемые параметры, в ответе получаем список id. Буквально пару дней назад это работало. В сниффере и сейчас все приходит нормально, а вот в программе ответ теперь приходит без idшников. Хотя я полностью имитирую запрос. Подскажите, в чем может быть дело? Upd: обнаружил, что на других компьютерах такой проблемы нет, стало быть дело в моем.
Не знаю, с чем это было связано. На других компьютерах программа работала корректно. Может подхватил фигню какую-то. В общем, после отката системы все вновь заработало и на моем. Запрос отправляю через элемент управления webbrowser.
Проблема все еще имеет место. Я пробовал полностью имитировать запрос из хрома, вместе со всеми заголовками, но на одних компьютерах ответ приходит с IDами, а на других - без. Аккаунт один, ОС одна. С чем тогда это может быть связано? Должно быть: Приходит:
5 - Авторизация пользователя не удалась. Убедитесь, что Вы используете верную схему авторизации. (c) vkapi
Так тут же не используется апи. Там вообще нет метода, возвращающего именно друзей с параметрами. Так бы и проблемы не было Я имитирую запрос, который отправляется, когда на странице "мои друзья" выбираются нужные параметры (менюшка справа). В postdata передаются эти параметры и id юзера, чьи друзья нужны. Авторизация проходит в самом webbrowser'е. Без нее возвращается что-то вроде: Может, дело в самом IE? P.S. через GET запрос - ситуация аналогичная.
Да, чет не подумал Функция отправляет 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ы
в шарпах (или что это) я не в зуб ногой, но мне кажется, что ты забываешь отправлять куки вместе с юзерагентом
да, это шарп Webbrowser в .NET - это такой мини Internet Explorer, все заголовки и куки там передаются автоматически. В этом плане - удобная вещь, но память жрет, как активная вкладка. Юзер-агент я подменяю, дабы ответ всегда был одинаковый. А то контакт для разных версий IE отдает разные строки. Так что тут в другом дело
я хз кароче. когда мне нужны друзья по критериям, я делаю не очень просто: авторизуюсь на апи, получаю всех друзей с friends.get'ом с параметрами fields=sex,bdate,city,country,has_mobile,contacts,education,online...и тд, и выбираю из массива нужных мне людей из города 1, скажем. или тех кто онлайн. или тех, чей год рождения больше 1950, но меньше 1970. или сразу со всеми параметрами
Тоже себе вариант, но если требуется выборка только по полу, возрасту и городу, то рациональнее один запрос отправить, и контакт все сделает сам Но почему-то на одних компах ответ приходит с идами, а на других - без. Сначала на моем компе прога перестала IDы получать. Сидел, ковырялся, и хоть тресни - не работает. Откатил систему - все вновь парсится корректно. Ниче, вроде, не ставил, не удалял. А щас узнал от пользователей, что у кого-то работает, у кого-то - нет. И хрен знает, с чем это связано. Какая-то странная дичь происходит