Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация на торренте 
V
    Опции темы
Dobermann
Дата 17.2.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: 1
Всего: 0



Всем привет!
Вот код:
Код

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                HttpWebRequest authReq = (HttpWebRequest)WebRequest.Create("http://login.torrents.ru/forum/login.php");
                authReq.Timeout = 5000;
                authReq.Method = "POST";
                authReq.CookieContainer = new CookieContainer();
                authReq.AllowAutoRedirect = true;
                string paramReg = string.Format("redirect={3}&login_username={0}&login_password={1}&login={2}", HttpUtility.UrlEncode("111"), HttpUtility.UrlEncode("222"), HttpUtility.UrlEncode("Вход"), HttpUtility.UrlEncode("index.php"));
                byte[] POST_Q = ASCIIEncoding.ASCII.GetBytes(paramReg);
                authReq.ContentLength = POST_Q.Length;
                authReq.GetRequestStream().Write(POST_Q, 0, POST_Q.Length);
                authReq.GetRequestStream().Close();
 
                HttpWebResponse regResponse = (HttpWebResponse)authReq.GetResponse();
 
                Console.WriteLine(regResponse.ResponseUri.ToString());
                Console.ReadKey();
            }
            catch (WebException ee)
            {
                Console.WriteLine(ee.Message);
            }
        }
    }
}

Кто-нибудь может объяснить почему не проходит авторизация?! Смотрел ответ - капчи нет!
PM   Вверх
Fortnox
Дата 17.2.2010, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Нужно установить свойство ContentType:
Код

req.ContentType = "application/x-www-form-urlencoded"

И убрать автодирект, иначе не получите кукисы сессии.
Рабочий код: 
Код

            string loginUrl = "http://login.torrents.ru/forum/login.php";
            string query = String.Format("login_username={0}&login_password={1}&login=Вход",
               "login", "pass"); // логин и пароль
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(loginUrl);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.KeepAlive = true;
            req.AllowAutoRedirect = false;
            req.CookieContainer = new CookieContainer();
            byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(query);
            req.ContentLength = ByteArr.Length;
            req.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            cookies = res.Headers[HttpResponseHeader.SetCookie]; // кукисы сессии


Это сообщение отредактировал(а) Fortnox - 17.2.2010, 23:30
PM MAIL   Вверх
Dobermann
Дата 18.2.2010, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: 1
Всего: 0



Цитата(Fortnox @  17.2.2010,  23:19 Найти цитируемый пост)
Нужно установить свойство ContentType:

Этот свойство никогда не влияло на результат! Как и многие другие...

Как же без редиректа понять, что авториация прошла, если: 
Код

            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            string cookies = res.Headers[HttpResponseHeader.SetCookie]; // кукисы сессии
            StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding(1251));
            StreamWriter sw = new StreamWriter(@"с:\123.html", false, Encoding.GetEncoding(1251));
            while ((temp = sr.ReadLine()) != null)
                sw.WriteLine(temp);
файл с:\123.html - пуст!

Код

Console.WriteLine(res.ResponseUri.ToString()); // выдает http://login.torrents.ru/forum/login.php (это понятно, т.к. редирект откл.)

PM   Вверх
Fortnox
Дата 18.2.2010, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Dobermann, проверять свойство StatusCode у res, если оно равно Found, значит авторизация прошла, иные значения - не прошла.

Свойство ContentType нужно ставить равным application/x-www-form-urlencoded
Просто выполните этот код 2 раза:
Код

                HttpWebRequest authReq = (HttpWebRequest)WebRequest.Create("http://login.torrents.ru/forum/login.php");
                authReq.Method = "POST";
                authReq.CookieContainer = new CookieContainer();
                authReq.AllowAutoRedirect = false;
                //authReq.ContentType = "application/x-www-form-urlencoded";
                string paramReg = string.Format("login_username={0}&login_password={1}&login={2}", "login", "pass", "Вход");
                byte[] POST_Q = Encoding.GetEncoding(1251).GetBytes(paramReg);
                authReq.ContentLength = POST_Q.Length;
                authReq.GetRequestStream().Write(POST_Q, 0, POST_Q.Length);
                authReq.GetRequestStream().Close();

                HttpWebResponse regResponse = (HttpWebResponse)authReq.GetResponse();

                Console.WriteLine(regResponse.StatusCode);
                Console.WriteLine(regResponse.Headers[HttpResponseHeader.SetCookie].ToString());
                Console.ReadKey();

Первый раз с закомментированной строкой ContentType, а во второй раз - раскомментируйте ее.
application/x-www-form-urlencoded значит, что передаются данные формы, если не указать этого - тип будет text/plain и авторизоваться не получится.
PM MAIL   Вверх
Dobermann
Дата 18.2.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: 1
Всего: 0



Цитата(Fortnox @  18.2.2010,  08:07 Найти цитируемый пост)
application/x-www-form-urlencoded значит, что передаются данные формы, если не указать этого - тип будет text/plain и авторизоваться не получится. 

Блин, вот чего не знал того не знал...спасибо, сейчас попробую!
PM   Вверх
Dobermann
Дата 19.2.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: 1
Всего: 0



Цитата(Fortnox @  18.2.2010,  08:07 Найти цитируемый пост)
StatusCode у res, если оно равно Found
Ага, так и есть.
Так а как же мне попасть на главную страницу уже авторизованным? В смысле как куки передать?
Такой код переводит на главную страницу, но не авторизовынным =\ (если вывести ответ в файл, тот там опять поля логина и пароля вводит надо, т.е. нет моего ника...)
Код

            CookieContainer cooc = new CookieContainer();

            HttpWebRequest authReq = (HttpWebRequest)WebRequest.Create("http://login.rutracker.org/forum/login.php");
            authReq.Method = "POST";

            authReq.CookieContainer = cooc;

            authReq.AllowAutoRedirect = false;
            authReq.ContentType = "application/x-www-form-urlencoded";
            string paramReg = string.Format("login_username={0}&login_password={1}&login={2}", "111", "222", "Вход");
            byte[] POST_Q = Encoding.GetEncoding(1251).GetBytes(paramReg);
            authReq.ContentLength = POST_Q.Length;
            authReq.GetRequestStream().Write(POST_Q, 0, POST_Q.Length);
            authReq.GetRequestStream().Close();
            HttpWebResponse regResponse = (HttpWebResponse)authReq.GetResponse();

            cooc = authReq.CookieContainer;

            authReq = (HttpWebRequest)WebRequest.Create("http://rutracker.org/forum/index.php");
            authReq.Method = "GET";
            authReq.CookieContainer = cooc;

            HttpWebResponse regResponse1 = (HttpWebResponse)authReq.GetResponse();
            Console.ReadKey();


Это сообщение отредактировал(а) Dobermann - 19.2.2010, 11:42
PM   Вверх
Fortnox
Дата 19.2.2010, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Dobermann, создаете запрос, в заголовки запроса добавляете кукисы, полученные пр авторизации:
Код

string cookies;
req.Headers.Add(HttpRequestHeader.Cookie, cookies);
 
PM MAIL   Вверх
Dobermann
Дата 20.2.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: 1
Всего: 0



Ага, воткнул smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.