Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Авторизация на сайте


Автор: Alkash 10.5.2012, 15:36
Доброго времени суток, уважаемые форумчане.Имеется сайт, на который мне необходимо авторизоваться из приложения. Делаю сие отправкой POST запроса, с помощью WebRequest.
Код

        public static string HttpPost(string URI, string Parameters)
        {
            System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
            req.ContentLength = bytes.Length;
            System.IO.Stream os = req.GetRequestStream();
            os.Write(bytes, 0, bytes.Length); 
            os.Close();
            System.Net.WebResponse resp = req.GetResponse();
            if (resp == null) return null;
            System.IO.StreamReader sr =
                  new System.IO.StreamReader(resp.GetResponseStream());
            return sr.ReadToEnd().Trim();
        }
*****
       richTextBox1.AppendText(HttpPost("https://secure.runescape.com/m=weblogin/login.ws", "username=shurik3d&password=medic&submit=login&mod=www&ssl=0&dest="));

Судя по снифферу - пост проходит как надо, редиректы на сайте тоже отрабатывают. Но почему - то авторизация не происходит, хотя я повторяю те параметры что шлет браузер. А в ответе сервера - таки не прошла авторизация, и он мне возвращает главную страницу. Собсвенно вопрос - что я делаю не так, и как авторизоваться на данной странице?

PS: www.runescape.com - терзаемый сайт собственно.

Добавлено @ 15:46
Код

 public static string HttpPost(string URI, string Parameters)
        {
            var req = (HttpWebRequest)WebRequest.Create(URI);
            req.AllowAutoRedirect = true;
            req.UserAgent = "User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)";
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";
            req.Timeout = 10000;
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
            req.ContentLength = bytes.Length;
            System.IO.Stream os = req.GetRequestStream();
            os.Write(bytes, 0, bytes.Length);
            os.Close();
            System.Net.WebResponse resp = req.GetResponse();
            if (resp == null) return null;
            System.IO.StreamReader sr =
                  new System.IO.StreamReader(resp.GetResponseStream());
            return sr.ReadToEnd().Trim();
        }

Попробовал вот так - тоже облом.

Автор: i2m 19.5.2012, 18:19
Нужно где то хратить куки, для этого нужно добавить CookieContainer 
        
Код

        private static readonly CookieContainer cookies = new CookieContainer();

        public static string HttpPost(string URI, string Parameters)
        {
            System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
            req.ContentType = "application/x-www-form-urlencoded";
            req.CookieContainer = cookies;
            req.Method = "POST";
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
            req.ContentLength = bytes.Length;
            System.IO.Stream os = req.GetRequestStream();
            os.Write(bytes, 0, bytes.Length); 
            os.Close();
            System.Net.WebResponse resp = req.GetResponse();
            if (resp == null) return null;
            System.IO.StreamReader sr =
                  new System.IO.StreamReader(resp.GetResponseStream());
            return sr.ReadToEnd().Trim();
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)