Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2012, 16:19   #1
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию получение __utma и __utmb куки

Как мне правильно получить __utma и __utmb куки.
Пишу программу для полуавтоматической авторизации. Работа доходит до отсылки капчи и тут же глохнет. Передаю все, за исключением этих куки.
Как их можно получить и зачем они нужны?
qwq вне форума Ответить с цитированием
Старый 10.12.2012, 21:08   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Это кукисы гугл аналитикс...я думаю они вам не нужны
Reskov вне форума Ответить с цитированием
Старый 10.12.2012, 21:23   #3
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

А вообще простите конечно, но Вы очень странный человек я выложил Вам рабочий код, больше недели назад... Вы отказываетесь им пользоваться и до сих пор задаете вопросы... Выложу его еще раз.. Может на этот раз Вы им воспользуетесь...
Код:
  private void button4_Click(object sender, EventArgs e)
        {
            using (var client = new WebClientEx())
            {
                var data = new NameValueCollection
            {
                { "login", "123" },
                { "password", "123" },
                {"enter","Войти"}
            };
                var response1 = client.UploadValues("http://uh.ru/login/", data);
                
                var response2 = client.DownloadData("http://uh.ru/dev/captcha/idx.php");
                using (Image image = Image.FromStream(new MemoryStream(response2)))
                {
                    image.Save("c:\\output.jpg", ImageFormat.Jpeg); 
                }

                var input=Microsoft.VisualBasic.Interaction.InputBox("Question?","Title","Default Text");
                var data2 = new NameValueCollection()
                    { { "keystring", input }, { "login", "123" }, { "password", "123" }, { "enter", "Отправить" } };

                client.UploadValues("http://uh.ru/login/", data2);
                var response3 = client.DownloadData("http://uh.ru/profile/");

                File.WriteAllBytes("c:\\1.html",response3);
            }
        }
    public class WebClientEx : WebClient
    {
        private CookieContainer _cookieContainer = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = _cookieContainer;
            }
            return request;
        }
    }
Reskov вне форума Ответить с цитированием
Старый 10.12.2012, 22:06   #4
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

Это все я реализовал, но когда программа доходит до отправки капчи, не проходит авторизация. Помимо перехода на сайт http://uh.ru/, браузер переходит и на http://klick.uh.ru/balance.php?key=128747960983490486
я подумал может он этот key берет из __utma и __utmb куков.
Завтра скину весь код и скрины сниффера.
qwq вне форума Ответить с цитированием
Старый 11.12.2012, 14:11   #5
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

как и обещал вот код
Код:
CookieContainer next_cc = new CookieContainer();
        private void button1_Click(object sender, EventArgs e)
        {
            #region Загрузка uh.ru
            HttpWebRequest webreq = (HttpWebRequest)HttpWebRequest.Create("http://uh.ru");
            webreq.Proxy = new WebProxy("127.0.0.1", 8888);
            webreq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            webreq.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
            webreq.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            webreq.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            webreq.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.33 (KHTML, like Gecko) Chrome/13.0.755.0 Safari/534.33";
            webreq.CookieContainer = new CookieContainer();
            HttpWebResponse webresp = (HttpWebResponse)webreq.GetResponse();
            StreamReader stream = new StreamReader(webresp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
            richTextBox1.Text = stream.ReadToEnd();
	    #endregion

            foreach (Cookie cook in webresp.Cookies)
            {
                listBox1.Items.Add(cook.ToString());
                listBox1.Items.Add(cook.Value);
                sesid = cook.Value;
                listBox1.Items.Add("Path:" + cook.Path);
                //path = cook.Path;
            }

            #region Загрузка uh.ru/login
            webreq = (HttpWebRequest)HttpWebRequest.Create("http://uh.ru/login/");
            webreq.Proxy = new WebProxy("127.0.0.1", 8888);
            webreq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            webreq.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
            webreq.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            webreq.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            webreq.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.33 (KHTML, like Gecko) Chrome/13.0.755.0 Safari/534.33";
            //webreq.Headers.Add("googe=100199");
            webreq.CookieContainer = new CookieContainer();
            //CookieContainer next_cc = new CookieContainer();            
            webreq.CookieContainer.Add(webresp.Cookies);
            next_cc = webreq.CookieContainer;
            webresp = (HttpWebResponse)webreq.GetResponse();            
            stream = new StreamReader(webresp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
            richTextBox1.Text = stream.ReadToEnd();
            #endregion
        }

        private void button2_Click(object sender, EventArgs e)
        {
            #region Загрузка uh.ru/login передача login pass
            HttpWebRequest webreq1 = (HttpWebRequest)HttpWebRequest.Create("http://uh.ru/login/");
            webreq1.Proxy = new WebProxy("127.0.0.1", 8888);
            webreq1.Method = "POST";
            webreq1.AllowAutoRedirect = true;
            webreq1.Headers.Add("Cache-Control", "max-age=0");
            webreq1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            webreq1.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
            webreq1.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            webreq1.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            webreq1.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.33 (KHTML, like Gecko) Chrome/13.0.755.0 Safari/534.33";
            webreq1.CookieContainer = next_cc;
            webreq1.ServicePoint.Expect100Continue = false;
            webreq1.ContentType = "application/x-www-form-urlencoded";
            webreq1.Headers.Add("Origin", "http://uh.ru");
            webreq1.Referer = "http://uh.ru/login/";           
            byte[] query = System.Text.Encoding.GetEncoding("UTF-8").GetBytes("login=" + textBox1.Text + "&password=" + textBox2.Text + "q&enter=%D0%92%D0%BE%D0%B9%D1%82%D0%B8");
            webreq1.ContentLength = query.Length;
            webreq1.GetRequestStream().Write(query, 0, query.Length);
            HttpWebResponse webresp1 = (HttpWebResponse)webreq1.GetResponse();
            StreamReader stream1 = new StreamReader(webresp1.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
            richTextBox1.Text = stream1.ReadToEnd();
            #endregion
qwq вне форума Ответить с цитированием
Старый 11.12.2012, 14:11   #6
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

#region Получение капчи
Код:
            Image image = null;
            webreq1 = (HttpWebRequest)HttpWebRequest.Create("http://uh.ru/dev/captcha/idx.php?" + sesid);
            webreq1.Proxy = new WebProxy("127.0.0.1", 8888);
            webreq1.Accept = "*/*";
            webreq1.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
            webreq1.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            webreq1.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            webreq1.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.33 (KHTML, like Gecko) Chrome/13.0.755.0 Safari/534.33";
            webreq1.CookieContainer = new CookieContainer();
            webreq1.CookieContainer.Add(webresp1.Cookies);
            webreq1.Referer = "http://uh.ru/login/";

            webresp1 = (HttpWebResponse)webreq1.GetResponse();
            Stream stre = webresp1.GetResponseStream();
            image = Image.FromStream(stre);
            pictureBox1.Image = image;
            #endregion
        }

        private void button3_Click(object sender, EventArgs e)
        {
            #region Отправка uh.ru/login передача login pass капча
            HttpWebRequest webreq1 = (HttpWebRequest)HttpWebRequest.Create("http://uh.ru/login/");
            webreq1.Proxy = new WebProxy("127.0.0.1", 8888);
            webreq1.Method = "POST";
            //webreq1.AllowAutoRedirect = true;
            webreq1.Headers.Add("Cache-Control", "max-age=0");
            webreq1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            webreq1.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3");
            webreq1.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            webreq1.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            webreq1.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.33 (KHTML, like Gecko) Chrome/13.0.755.0 Safari/534.33";
            webreq1.CookieContainer = next_cc;
            webreq1.ServicePoint.Expect100Continue = false;
            webreq1.ContentType = "application/x-www-form-urlencoded";
            webreq1.Headers.Add("Origin", "http://uh.ru");
            webreq1.Referer = "http://uh.ru/login/";
            byte[] query = System.Text.Encoding.GetEncoding("UTF-8").GetBytes("keystring=" + textBox3.Text + "&login=" + textBox1.Text + "&password=" + textBox2.Text + "&enter=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C");
            webreq1.ContentLength = query.Length;
            webreq1.GetRequestStream().Write(query, 0, query.Length);
            HttpWebResponse webresp1 = (HttpWebResponse)webreq1.GetResponse();
            StreamReader stream1 = new StreamReader(webresp1.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
            richTextBox1.Text = stream1.ReadToEnd();
            #endregion
терерь немного пояснений
При работе через обычный браузер, сниффер показывает такую работу
http://i52.fastpic.ru/big/2012/1211/...259eaf6d78.png
после того как убрал все сервисы гугл для анализа, и контент(рисунки и т.д.)
http://i52.fastpic.ru/big/2012/1211/...ffaec161f0.png
без
а так работает программа
http://i52.fastpic.ru/big/2012/1211/...5804f72f4f.png
не знаю как получить то что получает брыузер по ссылке http://click.uh.ru/balance.php?key=1...24783874457151
не понимаю как получить этот key
вот то что приходит и уходит по этой ссылке
http://i52.fastpic.ru/big/2012/1211/...d7056fb9b6.png
еще интересуют __utma и __utmb куки(думаю что в них содержится что то важное для авторизации).
Насколько я понял при переходе по http://click.uh.ru/, сервер присылает id номер пользователя, вместе с которым и завершается авторизация.

Браузер использую гугл хром, сниффер Fiddler2
qwq вне форума Ответить с цитированием
Старый 11.12.2012, 22:03   #7
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Этот key генериться на сервере...думаю знает только создатель как он генериться, и он вам врядли скажет...)
1) Возьмите RegExp распарсите респонсе или htmlagilitypack и получите ссылку...
2) перейдите по ней GET запросом прикрепив полученный до этого куки контейнер...
3) из полученного респонса выдерните баланс

Цитата:
Это все я реализовал, но когда программа доходит до отправки капчи, не проходит авторизация.
Если Вы все-таки обратите внимание на мой код там проходит ввод логина капча сохраняется на диск c: затем запрашивается ввод капчи и затем происходит авторизация... Авторизуется верно при правильном вводе капчи я проверял...

Последний раз редактировалось Reskov; 11.12.2012 в 22:05.
Reskov вне форума Ответить с цитированием
Старый 12.12.2012, 10:21   #8
qwq
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 96
По умолчанию

Спасибо вам. Все таки придется взять ваш код. Хотел сделать все сам, но что то не получается. Не могли бы вы по подробней объяснить что и как там рабтает. Хочется разобраться на будующее(и может у вас есть литература которую посоветуете почитать?). Спасибо еще раз. Очень выручили.
qwq вне форума Ответить с цитированием
Старый 12.12.2012, 20:16   #9
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

По сути делается тоже самое что у вас, только с помощью WebClient, код выглядит лучше...
Код:
 private void button4_Click(object sender, EventArgs e)
        {
            using (var client = new WebClientEx())
            {
// колекция данных которые загружаем на сервер
                var data = new NameValueCollection
            {
                { "login", "123" },
                { "password", "123" },
                {"enter","Войти"}
            };
//post запрос
                var response1 = client.UploadValues("http://uh.ru/login/", data);
//get запрос                
                var response2 = client.DownloadData("http://uh.ru/dev/captcha/idx.php");
//сохраняем image из get запроса
                using (Image image = Image.FromStream(new MemoryStream(response2)))
                {
                    image.Save("c:\\output.jpg", ImageFormat.Jpeg); 
                }
//ждем ввода капчи
                var input=Microsoft.VisualBasic.Interaction.InputBox("Question?","Title","Default Text");
// новая колекция данных которые загружаем на сервер
                var data2 = new NameValueCollection()
                    { { "keystring", input }, { "login", "123" }, { "password", "123" }, { "enter", "Отправить" } };
//post запрос с авторизацией
                client.UploadValues("http://uh.ru/login/", data2);
//get запрос к профилю
                var response3 = client.DownloadData("http://uh.ru/profile/");
// сохраняем профиль в файл
                File.WriteAllBytes("c:\\1.html",response3);
            }
        }
// враппер стандартного класс для того чтобы сохранялись кукисы между запросами
    public class WebClientEx : WebClient
    {
        private CookieContainer _cookieContainer = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
//переопределяем контейнер куки для текущего запроса
                (request as HttpWebRequest).CookieContainer = _cookieContainer;
            }
            return request;
        }
    }
Reskov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
авторизация и куки temkas C# (си шарп) 3 10.08.2011 11:21
webbrowser и куки doromones Работа с сетью в Delphi 0 15.12.2010 18:08
Куки ilSMoKEli Работа с сетью в Delphi 1 15.06.2010 11:09
Куки Kinematik Работа с сетью в Delphi 0 27.12.2008 04:53