Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: API, боты
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/20: Рейтинг темы: голосов - 20, средняя оценка - 4.85
amenofus
8 / 8 / 2
Регистрация: 27.04.2010
Сообщений: 11
1

Бот поиск по сайту

27.04.2010, 20:44. Просмотров 3805. Ответов 11
Метки нет (Все метки)

Доброго времени суток!
Хочу написать бота который будет посылать запрос на поиск на сайте.
Проблема в том что поиск требует авторизации.

То что нашел на этом сайте подтесав под себя не работает.

Пробовал вставлять в запос куки что взял с Mozzila Firefox но толку никакого.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://rutracker.org/forum/tracker.php?nm=lineage");
 
            //Здесь косим под Mozilla
            req.KeepAlive = true;
            req.UserAgent = @"  Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19r";
            req.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add(HttpRequestHeader.AcceptLanguage, @"uk,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            req.Headers.Add(HttpRequestHeader.KeepAlive, "115");
            req.CookieContainer = new CookieContainer();
 
            Cookie c=new Cookie("bb_data","1-7042500-UGNdam31aPbP23WaTiok-1540494341-1272379211-1272379211-1295897992-1");
            c.Domain="rutracker.org";
            req.CookieContainer.Add(c);
            req.ContentType = "application/x-www-form-urlencoded";
 
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.Default);
            string htmlText = sr.ReadToEnd();
            resp.Close();
в результате переадресация на {http://login.rutracker.org/forum/login.php?redirect=/forum/tracker.php?nm=lineage}

Авторизироватся также не могу, чтобы получить куки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://rutracker.org/forum/tracker.php?nm=lineage");
 
            //Здесь косим под Mozilla
            req.KeepAlive = true;
            req.UserAgent = @"  Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19r";
            req.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add(HttpRequestHeader.AcceptLanguage, @"uk,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            req.Headers.Add(HttpRequestHeader.KeepAlive, "115");
            req.ContentType = "application/x-www-form-urlencoded";
            req.CookieContainer = new CookieContainer();
 
            string data = @"login_username=qweqwe&login_password=12345";
            
            Stream newStream = req.GetRequestStream();
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] buff = encoding.GetBytes(data);
            newStream.Write(buff, 0, data.Length);
            newStream.Close();
 
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.Default);
            string htmlText = sr.ReadToEnd();
            resp.Close();
В двух случаях ответные куки пустые.
если передать htmlText в WebBrowser то видим что авторизация не прошла.

Сижу над этой проблемой уже второй день ничего не получается.
Я был бы очень признателен если бы кто-то помог.
ps: прежде чем давать код ответа проверьте работает ли он у вас

Зарание большое СПАСИБО.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2010, 20:44
Ответы с готовыми решениями:

Поиск ссылок по сайту
День добрый! Нужно осуществить поиск битых ссылок по сайту. Программа подгружает с главной...

Поиск по сайту
Реализовываю поиск по всему сайту, ищу по контенту, по заголовком и т.д. У кого какие идеи есть по...

Умный поиск по сайту
Здравствуйте, у меня такая проблема: сайт работает с большим количеством книг, и мне нужно сделать...

Как работает поиск по сайту?
Подскажите как работает поиск по сайту, т.е. как найти тот или иной раздел, и вообще возможно ли...

Необходимо организовать поиск по сайту
Задача: необходимо организовать поиск по сайту. Все страницы ASP динамические с информацией из базы...

11
IICuX
85 / 85 / 26
Регистрация: 04.01.2010
Сообщений: 270
27.04.2010, 23:54 2
вообще бред написан
0
amenofus
8 / 8 / 2
Регистрация: 27.04.2010
Сообщений: 11
28.04.2010, 14:13  [ТС] 3
Я раньше все делал через WebBrowser или mshtml.HtmlDocument2 но в даном случае мне они не подходят.
Мне нужен тока html текст страницы(результат поиска) а они подгружают много лишнего.
Я раньше никогда с HtmlWebReqest и HtmlWebResponse не имел дел.
Этот код я написал переделав под себя то что нашел на этом сайте.
Я знаю что ответ от сервера не тот что нужно(проблема в авторизации и куках).
Сегодня уже третий день сижу над этой задачей.
Поэтому и прошу если кто-то знает как должно бить помогите мне!
0
MAcK
Комбайнёр
1579 / 677 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
28.04.2010, 14:37 4
Цитата Сообщение от IICuX Посмотреть сообщение
вообще бред написан
Так а в чём проблема - помогите! Иначе МОЛЧИТЕ
0
28.04.2010, 14:37
IICuX
85 / 85 / 26
Регистрация: 04.01.2010
Сообщений: 270
29.04.2010, 12:29 5
Цитата Сообщение от MAcK Посмотреть сообщение
Так а в чём проблема - помогите! Иначе МОЛЧИТЕ
Там весь код проблема, вообще даже логика неверная
0
MAcK
Комбайнёр
1579 / 677 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
29.04.2010, 12:50 6
Цитата Сообщение от IICuX Посмотреть сообщение
Там весь код проблема, вообще даже логика неверная
так подскажите где что и как должно быть. Тут мы помогаем, а не критикуем других, показывая какие мы умные!
0
amenofus
8 / 8 / 2
Регистрация: 27.04.2010
Сообщений: 11
29.04.2010, 17:33  [ТС] 7
и в чьом же там логика неверная?
запрос -> ответ , всё просто.
я с этим дела раньше не имел поэтому и спрашиваю у других.
прежде чем делать этот пост я посмотрел другие по той же теме, у них код практически тот же.
я понимаю что он не работает, поэтому и прошу помочь.
если ты знаеш как должно бить тогда пожалуйста ПОМОГИ.
0
amenofus
8 / 8 / 2
Регистрация: 27.04.2010
Сообщений: 11
11.05.2010, 18:48  [ТС] 8
Лучший ответ Сообщение было отмечено как решение

Решение

наконец получилось.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://login.rutracker.org/forum/login.php");
            req.AllowAutoRedirect = true;
            req.Method = "POST";
            //Здесь косим под Mozilla
            req.KeepAlive = true;
            
            req.UserAgent = @"  Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19";
            req.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add(HttpRequestHeader.AcceptLanguage, @"uk,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            req.Headers.Add(HttpRequestHeader.KeepAlive, "115");
            req.CookieContainer = new CookieContainer();
 
            string data = @"login_username=mylogin&login_password=mypass&login=%C2%F5%EE%E4";
            req.ContentType = "application/x-www-form-urlencoded";
            Stream newStream = req.GetRequestStream();
            byte[] buff = Encoding.Default.GetBytes(data);
            newStream.Write(buff, 0, data.Length);
            newStream.Close();
 
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); //это запрос авторизации чтоб получить куки
            HttpWebRequest r1 = (HttpWebRequest)HttpWebRequest.Create("http://rutracker.org/forum/tracker.php?nm=lineage");
            //r1.CookieContainer = new CookieContainer();
            //r1.CookieContainer.Add(req.CookieContainer.GetCookies(req.RequestUri)); //так почемуто не пашет
            r1.Method = "GET";
            r1.KeepAlive = req.KeepAlive;
            r1.UserAgent = req.UserAgent;
            r1.Accept = req.Accept;
            r1.Headers.Add(HttpRequestHeader.AcceptLanguage, @"uk,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            r1.Headers.Add(HttpRequestHeader.KeepAlive, "115");
            r1.Headers.Add(HttpRequestHeader.Cookie, req.CookieContainer.GetCookieHeader(req.RequestUri)); //в этом и била вся проблема
            resp = (HttpWebResponse)r1.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.Default);
            string htmlText = sr.ReadToEnd();
ps:поиск на сайте возможен только после авторизацыи.
3
F&D
73 / 30 / 2
Регистрация: 25.05.2010
Сообщений: 218
18.06.2010, 13:31 9
Цитата Сообщение от amenofus Посмотреть сообщение
наконец получилось.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://login.rutracker.org/forum/login.php");
            req.AllowAutoRedirect = true;
            req.Method = "POST";
            //Здесь косим под Mozilla
            req.KeepAlive = true;
            
            req.UserAgent = @"  Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19";
            req.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add(HttpRequestHeader.AcceptLanguage, @"uk,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            req.Headers.Add(HttpRequestHeader.KeepAlive, "115");
            req.CookieContainer = new CookieContainer();
 
            string data = @"login_username=mylogin&login_password=mypass&login=%C2%F5%EE%E4";
            req.ContentType = "application/x-www-form-urlencoded";
            Stream newStream = req.GetRequestStream();
            byte[] buff = Encoding.Default.GetBytes(data);
            newStream.Write(buff, 0, data.Length);
            newStream.Close();
 
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); //это запрос авторизации чтоб получить куки
            HttpWebRequest r1 = (HttpWebRequest)HttpWebRequest.Create("http://rutracker.org/forum/tracker.php?nm=lineage");
            //r1.CookieContainer = new CookieContainer();
            //r1.CookieContainer.Add(req.CookieContainer.GetCookies(req.RequestUri)); //так почемуто не пашет
            r1.Method = "GET";
            r1.KeepAlive = req.KeepAlive;
            r1.UserAgent = req.UserAgent;
            r1.Accept = req.Accept;
            r1.Headers.Add(HttpRequestHeader.AcceptLanguage, @"uk,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            r1.Headers.Add(HttpRequestHeader.KeepAlive, "115");
            r1.Headers.Add(HttpRequestHeader.Cookie, req.CookieContainer.GetCookieHeader(req.RequestUri)); //в этом и била вся проблема
            resp = (HttpWebResponse)r1.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.Default);
            string htmlText = sr.ReadToEnd();
ps:поиск на сайте возможен только после авторизацыи.
А как можно сделать, чтобы логин и пасс вводить через textBox-ы, и отображать результат авторизации в webbrowser?

Можно ли вот так:
Добавлено через 14 минут
C#
1
string data = string.Format("Login={0}&Password={1}",textBox1.Text, textBox2.Text;
вместо:
C#
1
string data = @"login_username=mylogin&login_password=mypass&login=%C2%F5%EE%E4";

оказалось можно, я попробовал. Но вот не могу сделать так, чтобы отображался уже я авторизированный на сайте в WebBrowser...

либо хотя бы как сделать запрос страницы (вывести полученную тогда страницу в текстовое поле или WebBrowser)...


HELP плиз, очень нужно. Курсовая под угрозой
0
F&D
73 / 30 / 2
Регистрация: 25.05.2010
Сообщений: 218
19.06.2010, 18:02 10
Помогите пожалуйста...
0
F&D
73 / 30 / 2
Регистрация: 25.05.2010
Сообщений: 218
21.06.2010, 18:31 11
Здравствуйте. Нужна помощь в работе с cookie.
Если быть точнее, как можно хранить куки и потом отправлять их?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
StringBuilder msg = new StringBuilder(String.Empty);
            Uri st = new Uri("http://www.deviantart.com");
            //string reqString = String.Format("username={0}&Password={1}", username, Password);
            string reqString = string.Format("username={0}&Password={1}", textBox1.Text, textBox2.Text);
            byte[] requestData = Encoding.UTF8.GetBytes(reqString);
            CookieContainer cc = new CookieContainer();
            var request = (HttpWebRequest)WebRequest.Create(thUri);
            request.Proxy = null;
            request.CookieContainer = cc;
            request.Method = "POST";
            request.ContentType = "text/html; charset=iso-8859-1";
            
            using (System.IO.Stream s = request.GetRequestStream())
                s.Write(requestData, 0, requestData.Length);
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                foreach (var str in cc.GetCookies(st))
                {
                    msg.Append(str);
                }
                MessageBox.Show(msg.ToString());
            }
0
m0nax
1250 / 951 / 113
Регистрация: 12.01.2010
Сообщений: 1,968
Завершенные тесты: 3
25.08.2010, 21:48 12
кто нибудь может объяснить природу кода amenofus ?
все как бы работает, вот только странно...

при пост запросе авторизации создается кукиКонтейнер, потом из него вытаскивается кук

во первых каким образом кукис оказывается в HttpWebRequest? ведь на деле он приходит в ответе сервера, т.е он должен оказаться где-то в HttpWebResponse, разве нет?

и самое интересное - в следующих запросах нельзя создавать кукиКонтейнер, с ним ничего не будет работать, что это за магия такая?
почему куки надо добавлять в именно в Headers запроса, а не в кукиКонтейнер?
0
25.08.2010, 21:48
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2010, 21:48

Поиск по сайту на www.relib.com
Люди, объясните как что-либо найти в форуме?

Поиск по сайту с базы sql
Добрый день! Как мне организовать поиск по сайту? Я новичок в asp так что не сердитесь. Я...

поиск по сайту с использованием Index Server
Добился от провайдера, чтобы сайт индексировался с помощью Index server, прикрутил поисковую форму....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.