Доброго времени суток. Пишу софтинку для работы в вк списка аккаунтов. Акк вступает в группу и отписывается в теме к примеру. Всё отлично, но когда начал прикручивать список акков, стала случаться непонятная вещь. Из списка 2 акка подряд авторизируются нормально, на 3-м всегда ошибка из-за истечения таймаута запроса при авторизации и хоть убей, всегда на 3-м акке. Все акки - валид. Это может какая-то особенность контакта? Кто сталкивался? Какие предположения?
на шарпе пишу. Code: public static string Login(string Email, string Pass) { HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(@"http://vkontakte.ru/login.php"); WebReq.Method = "POST"; WebReq.AllowAutoRedirect = false; WebReq.ContentType = "application/x-www-form-urlencoded"; WebReq.Timeout = 12000; byte[] sentData = Encoding.GetEncoding(1251).GetBytes("email=" + Email + "&pass=" + Pass); WebReq.ContentLength = sentData.Length; Stream sendStream = WebReq.GetRequestStream(); sendStream.Write(sentData, 0, sentData.Length); sendStream.Close(); WebResponse result = WebReq.GetResponse(); string sCookies = ""; string remixsid = null; if (!String.IsNullOrEmpty(result.Headers["Set-Cookie"])) { sCookies = result.Headers["Set-Cookie"]; var lines = sCookies.Split(';', ','); foreach (var l in lines) if (l.Contains("remixsid=")) { remixsid = l.Remove(0, "remixsid=".Length); break; } } return remixsid; } собственно на строке Code: WebResponse result = WebReq.GetResponse(); и вылетает по таймауту. Ставил даже 30 секунд. 2 акка нормально, на 3-м всё повторяется....
решилось добавлением небольшой задержки в сам цикл, оказалось 2 запроса очень быстро отправлялись друг за другом.
хотя нет, авторизацию переделал, все так и осталось. Работает через локальных прокси отлично ( через Fiddler ). А напрямую нет...
нет, зачем? авторизировался, получил куки, подставляю их в запрос, делаю что нужно, потом авторизирую следующий акк и в переменную записываются уже новые куки и дальше опять по кругу.
тьфу-тьфу, вроде решилось. оказалось надо закрывать все респонзы, стримы и ридеры, хотя по идее они должны были сами закрыться/удалиться, как и локальные переменные.
Кстати да, они реализуют IDisposable же, их лучше использовать как using() {} Хорошая мысля приходит опосля