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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 00:56   #1
x.dr3amer
Новичок
Джуниор
 
Регистрация: 03.05.2010
Сообщений: 4
По умолчанию C# авторизация на сайте ucoz.ru

Приветствую всех участников данного форума, первым делом хочу сказать - я не спаммер!
Мне очень сильно нужно написать программу для произведения некоторых действий на сайте системы ucoz.ru, для этого мне нужно устроить процесс авторизации, уже неделю как мучаюсь, никак не могу сделать задуманное, пожалуйста если кто имеет возможность помочь, помогите!

Вот мой код
x.dr3amer вне форума Ответить с цитированием
Старый 03.05.2010, 00:57   #2
x.dr3amer
Новичок
Джуниор
 
Регистрация: 03.05.2010
Сообщений: 4
По умолчанию

Класс для запросов и кукис
Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace Grabber
{
    public class HTTPClient
    {
        private CookieCollection Cooks = new CookieCollection();
        public HTTPClient(string session_cookiename)
        {
        }
        public void ClearCookie()
        {
        }
        public HttpWebResponse Request(string sUrl)
        {
            return Request(sUrl, true);
        }
        public HttpWebResponse Request_Post(string path, string post_body)
        {
            return Request_Post(path, post_body, true);
        }
        public HttpWebResponse Request_Get(string path, string get_body)
        {
            HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(path + get_body);
            WebReq.Method = "GET";
            HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
            if (WebResp.Cookies != null)
            {
                Cooks.Add(WebResp.Cookies);      
            } return WebResp;
        }

        public HttpWebResponse Request_Post(string path, string post_body, bool bAutoRedirect)
        {
            try
            {
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(path);
                httpWebRequest.AllowAutoRedirect = bAutoRedirect;
                httpWebRequest.CookieContainer = new CookieContainer();
                if (Cooks != null)
                {
                    httpWebRequest.CookieContainer.Add(Cooks);
                }
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes(post_body);
                httpWebRequest.ContentLength = ByteQuery.Length;
                Stream QueryStream = httpWebRequest.GetRequestStream();
                QueryStream.Write(ByteQuery, 0, ByteQuery.Length);
                QueryStream.Close();
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
                if (httpWebResponse.Cookies != null)
                {
                    Cooks.Add(httpWebResponse.Cookies);
                }
                return httpWebResponse;
            }
            catch (WebException ex)
            {
                return ex.Response as HttpWebResponse;
            }
        }
x.dr3amer вне форума Ответить с цитированием
Старый 03.05.2010, 00:57   #3
x.dr3amer
Новичок
Джуниор
 
Регистрация: 03.05.2010
Сообщений: 4
По умолчанию

Код:
public HttpWebResponse Request(string sUrl, bool bAutoRedirect)
        {
            try
            {
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(sUrl);
                httpWebRequest.AllowAutoRedirect = bAutoRedirect;
                httpWebRequest.CookieContainer = new CookieContainer();
                if (Cooks != null)
                {
                    httpWebRequest.CookieContainer.Add(Cooks);
                }
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
                if (httpWebResponse.Cookies != null)
                {
                    Cooks.Add(httpWebResponse.Cookies);
                }
                return httpWebResponse;
            }
            catch (WebException ex)
            {
                return ex.Response as HttpWebResponse;
            }
        }

        public bool fDWN(string fr, string st, int en)
        {
            try
            {
                File.Delete(st);
            }
            catch { }

            if (en == 0)
            {
                var request = (HttpWebRequest)WebRequest.Create(fr);
                request.Proxy = null;
                request.CookieContainer = new CookieContainer();
                if (Cooks != null)
                {
                    request.CookieContainer.Add(Cooks);
                }
                WebResponse response = request.GetResponse();
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.UTF8);
                string responseFromServer = reader.ReadToEnd();
                File.WriteAllText(st, responseFromServer);
                reader.Close();
                response.Close();
            }
            else
            {
                var request = (HttpWebRequest)WebRequest.Create(fr);
                request.Proxy = null;
                request.CookieContainer = new CookieContainer();
                if (Cooks != null)
                {
                    request.CookieContainer.Add(Cooks);
                }
                WebResponse response = request.GetResponse();
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.GetEncoding(en));
                string responseFromServer = reader.ReadToEnd();
                File.WriteAllText(st, responseFromServer);
                reader.Close();
                response.Close();
            }

            return true;
        }
    }

}
x.dr3amer вне форума Ответить с цитированием
Старый 03.05.2010, 00:57   #4
x.dr3amer
Новичок
Джуниор
 
Регистрация: 03.05.2010
Сообщений: 4
По умолчанию

получение переменных для запроса
Код:
 private bool vars()
        {
            htClient.fDWN("http://***.ucoz.ru/", Application.StartupPath + "\\auth.txt", 0);
            string parseStr = "";
            foreach (string s in File.ReadAllLines(Application.StartupPath + "\\auth.txt", System.Text.Encoding.UTF8))
            {
                if (s.Contains("<input type=\"hidden\" name=\"a\""))
                {
                    parseStr = s;
                }
            }
            postAuthA = chistka(parseStr.Substring(parseStr.IndexOf("name=\"a\" value=\"") + 16, 3));
            postAuthAjax = chistka(parseStr.Substring(parseStr.IndexOf("name=\"ajax\" value=\"") + 19, 3));
            postAuthRND = chistka(parseStr.Substring(parseStr.IndexOf("name=\"rnd\" value=\"") + 18, 4));
            string reqString = "user=mail@gmail.com&password=pasw&rem=1&a=" + postAuthA + "&ajax=" + postAuthAjax + "&rnd=" + postAuthRND;
            auth("http://***.ucoz.ru/index/sub", reqString);

            return true;
        }
чистилка
Код:
        private string chistka(string str)
        {
            str = str.Replace(" ", "");
            str = str.Replace("<", "");
            str = str.Replace(">", "");
            str = str.Replace("=", "");
            str = str.Replace("-", "");
            str = str.Replace('"', '\\');
            str = str.Replace("\\", "");
            str = str.Replace("/", "");
            return str;
        }
private string chistka2(string str)
        {
            string tmp = "";
            foreach (char ch in str.ToCharArray())
            {
                if (ch != '\'')
                {
                    tmp = tmp + ch.ToString();
                }
                else { return tmp; }
            }
            return tmp;
        }
посыл запросов
Код:
   private bool secondAuth = false;

        private void auth(string url, string req)
        {
            string sHTML = "";
            HttpWebResponse httpWebResponse = htClient.Request("http://***.ucoz.ru");
            if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
            {
                httpWebResponse.Close();
                httpWebResponse = htClient.Request_Post(url, req);

                if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                {
                    Stream stream = httpWebResponse.GetResponseStream();
                    using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8))
                    {
                        sHTML = reader.ReadToEnd();                 
                        try
                        {
                            sHTML = sHTML.Substring(sHTML.IndexOf("setTimeout") + 10);
                            if (secondAuth) { return; }                            
                            authStr = sHTML.Substring(sHTML.IndexOf('?') + 1, 25);
                            authStr = chistka2(authStr);
                            htClient.Request_Get("http://***.ucoz.ru",authStr);;
                            secondAuth = true;                          
                        }
                        catch { }
                    }
                }
            }
x.dr3amer вне форума Ответить с цитированием
Старый 17.04.2011, 04:34   #5
Dark-Code
Новичок
Джуниор
 
Регистрация: 17.04.2011
Сообщений: 1
По умолчанию

ТС, стукни мне 1111270
Dark-Code вне форума Ответить с цитированием
Старый 04.11.2011, 11:05   #6
Metellius
Новичок
Джуниор
 
Регистрация: 03.08.2011
Сообщений: 1
По умолчанию

Посыл запроса, как я понял, должен выглядеть так:
Цитата:
...
using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8))
{
sHTML = reader.ReadToEnd();
try
{
sHTML = sHTML.Substring(sHTML.IndexOf("setT imeout") + 10);
if (secondAuth) { return; }
authStr = sHTML.Substring(sHTML.IndexOf('?') + 1, 25);
authStr = chistka2(authStr);
htClient.Request_Get("http://***.ucoz.ru/?",authStr);;
secondAuth = true;
}
catch { }
...
Другое дело, что всё остальное работает не лучше. Было бы классно, если кто-нибудь ответец написал.

Последний раз редактировалось Metellius; 04.11.2011 в 11:06. Причина: Ясность прочтения
Metellius вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
авторизация на сайте ucoz kuzmich Работа с сетью в Delphi 11 18.01.2012 03:20
Авторизация на сайте Kengie Помощь студентам 2 23.03.2010 21:28
Авторизация на сайте Abadd0N Работа с сетью в Delphi 14 10.06.2009 12:31
Авторизация на сайте MultiBit Работа с сетью в Delphi 6 13.03.2009 18:45
Авторизация на сайте vladimirzzz Работа с сетью в Delphi 7 28.09.2008 21:59