Писал бота для GameMiner, [Ссылки могут видеть только зарегистрированные пользователи. ] для наглядности.
Смысл его не сложен - парсит ссылки на доступные раздачи и вступает в них.
Но есть одна проблема: если выключить Charles или запустить бот без Charles'а, то через 2-6 вступлений в раздачи бот перестает работать и зависает. С Charles'ом работает хоть 24 часа в сутки, все идеально.
Т.к. зависает именно на отправке POST запроса с куками, вот исходник функции:
Код:
private void game_enter(string gamekey, string playerkey, string cookie)
{
try
{
String secondStepForm = "_xsrf=" + playerkey + "&json=true";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://gameminer.ru/giveaway/enter/" + gamekey);
// Настраиваем параметры запроса
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor; InfoPath.3; InfoPath.1)";
request.Method = "POST";
request.Timeout = 100000;
// Указываем тип отправляемых данных
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = new CookieContainer();
var uri = new Uri("http://gameminer.ru/giveaway/enter/" + gamekey);
cookies.Text = Regex.Replace(cookie, "; ", "\n");
cookies.AppendText("\n");
int num_cookie = 0;
while (cookies.Lines[num_cookie] != "")
{
request.CookieContainer.SetCookies(uri, cookies.Lines[num_cookie]);
num_cookie++;
}
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
// Получаем ответ
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Получаем html-код страницы
//string html = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
//MessageBox.Show(html);
log.Text += "[" + DateTime.Now.ToString("HH:mm:ss") + "] GOOD: " + gamekey + "\n";
}
catch
{
log.Text += "[" + DateTime.Now.ToString("HH:mm:ss") + "] BAD: " + gamekey + "\n";
}
P.S. Без кук запрос не принимался, пришлось сделать так)
Добавлено через 18 часов 27 минут
Проблема решена, закройте.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ] - сообщество серверов MineCraft.
RPG, Survival, Hi-Tech сервера. 24\7. Без лагов.
Последний раз редактировалось XRASER; 10.07.2014 в 18:02.
Причина: Добавлено сообщение