Программная авторизация на сайте

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Musho, 12 Oct 2011.

  1. Musho

    Musho New Member

    Joined:
    8 Oct 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте.Ребята помогите с проблемой,уже мучаюсь неделю, не могу решить:(
    Суть такова: Нужно через программку на С# взять из сайта кое какую информацию.Но что бы туда попасть, нужно с начала авторизоваться.В этом и вся проблема,не могу авторизоваться.
    Промониторил весь google, нашёл пару толковых пример, но у меня не получается:(
    Вот мой код:
    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.IO;
    using System.Web;
    
    namespace Program1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void VKLogin(string mail, string password)
            {
                string FormParams = "user=" + mail + "&password=" + password + "&a=2&ajax=2&_tp_=xml";
                HttpWebResponse result = null;
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://clubtone.net/index/sub/");
                req.Method = "POST";
                req.Headers.Add("Accept-Language", "ru");
                req.ContentType = "application/x-www-form-urlencoded";
                req.Referer = "http://clubtone.net/";
                req.Accept = "application/xml, text/xml, */*; q=0.01";
                req.ContentType = "application/x-www-form-urlencoded";
                req.Headers.Add("Accept-Encoding","gzip, deflate");
                req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; MRSPUTNIK 2, 4, 0, 267; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; AskTbAVR-W1/5.12.5.17700; WebMoney Advisor)";
                req.Host = "clubtone.net";
                req.ContentLength = FormParams.Length;
    
                byte[] SomeBytes = null;
                
                SomeBytes = Encoding.UTF8.GetBytes(FormParams);
                req.ContentLength = SomeBytes.Length;
                Stream newStream = req.GetRequestStream();
                newStream.Write(SomeBytes, 0, SomeBytes.Length);
                newStream.Close();
                result = (HttpWebResponse)req.GetResponse();
    
                string[] cookieValTemp = null, cookieVal = null;
                string sCookie = null;
                if (result.Headers["Set-Cookie"] != null)
                {
                    cookieValTemp = result.Headers["Set-Cookie"].Split(new char[] { ',' });
                    sCookie = result.Headers["Set-Cookie"];
                }
    
                Stream ReceiveStream = result.GetResponseStream();
                Encoding encode = Encoding.GetEncoding("utf-8");
                StreamReader sr = new StreamReader(ReceiveStream, encode);
                string answer = sr.ReadToEnd();
                sr.Close();
                result.Close();
    
    
                CookieContainer cookie = new CookieContainer();
    
                string name = "", value = "", path = "", domain = "";
    
                
                for (int i = 0; i < cookieValTemp.Length; i++)
                {
                    if (cookieValTemp[i].IndexOf("expires=") != -1)
                    {
                        cookieValTemp[i] = cookieValTemp[i] + "," + cookieValTemp[i + 1];
                        string[] cookie1 = cookieValTemp[i].Split(new char[] { ';' });
                        if (cookie1.Length < 2)
                            continue;
                        name = cookie1[0].Split(new char[] { '=' })[0];
                        value = (cookie1[0].IndexOf("=") != -1) ? cookie1[0].Split(new char[] { '=' })[1] : "";
                        for (int j = 1; j < cookie1.Length; j++)
                        {
                            if (cookie1[j].IndexOf("path=") != -1)
                            {
                                path = cookie1[j].Split(new char[] { '=' })[1];
                            }
                            else if (cookie1[j].IndexOf("domain=") != -1)
                            {
                                domain = cookie1[j].Split(new char[] { '=' })[1];
                            }
                        }
                        cookie.Add(new Cookie(name, value, path, domain));
                        i++;
                    } else 
                    {
                        string[] cookie1 = cookieValTemp[i].Split(new char[] { ';' });
                        if (cookie1.Length < 2)
                            continue;
                        name = cookie1[0].Split(new char[] { '=' })[0];
                        value = (cookie1[0].IndexOf("=") != -1) ? cookie1[0].Split(new char[] { '=' })[1] : "";
                        for (int j = 1; j < cookie1.Length; j++)
                        {
                            if (cookie1[j].IndexOf("path=") != -1)
                            {
                                path = cookie1[j].Split(new char[] { '=' })[1];
                            }
                            else if (cookie1[j].IndexOf("domain=") != -1)
                            {
                                domain = cookie1[j].Split(new char[] { '=' })[1];
                            }
                        }
                        cookie.Add(new Cookie(name, value, path, domain));
                    }
                }
                
    
                HttpWebRequest req1 = (HttpWebRequest)HttpWebRequest.Create("http://clubtone.net/load/club_music/2");
                
                req1.Method = "GET";
                req1.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                req1.Referer = "http://clubtone.net/";
                req1.Headers.Add("Accept-Language", "ru-RU");
                req1.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; MRSPUTNIK 2, 4, 0, 267; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; AskTbAVR-W1/5.12.5.17700; WebMoney Advisor)";
                req1.Headers.Add("Accept-Encoding", "gzip, deflate");
                req1.Host = "clubtone.net";
                req1.KeepAlive = true;
                req1.CookieContainer = cookie;
     
                HttpWebResponse result1 = (HttpWebResponse) req1.GetResponse();
                Stream ReceiveStream1 = result1.GetResponseStream();
                StreamReader srd = new StreamReader( ReceiveStream1, encode );
                string html = srd.ReadToEnd();
                result1.Close();
            }
    
            private void btnRun_Click(object sender, EventArgs e)
            {
                logBox.Clear();
                VKLogin(tbMail.Text, tbPassword.Text);
            }
        }
    }
    
    
    Первый запрос проходит нормально.Сервер возвращает мне куки.Я беру его и вставляю во второй запрос.
    А после второго запроса сервер не понятно как то для меня реагирует. Словил пакеты через Wireshark, скриншот на картинке нижу

    [​IMG]

    Прошу помогите, нужно решить эту проблему.Спасибо.