[c#]помогите с авторизацией в ВК

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by j-prof, 24 Feb 2011.

  1. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    вот что шлю
    POST http://login.vk.com/?act=login&to=&from_host=m.vkontakte.ru&pda=1 HTTP/1.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    User-Agent: Mozilla/5.0 Firefox/3.6.8
    Referer: http://m.vkontakte.ru/login?op=slogin
    Host: login.vk.com
    Content-Length: 41
    Accept-Encoding: gzip
    Connection: Keep-Alive

    email=мыло%40mail.ru&pass=myvalidpass
    вот и в итоге мя редиректит на
    http://m.vkontakte.ru/login?m=1&email=
    т.е. логин:пасс не верный
    пишу в поток постпараметры в кодировке cp1251
    сорри за нубство;)
    и еще одно в этом пост запросе

    Content-Type: application/x-www-form-urlencoded

    нету
    а в запросе к страничке на которую редиректит он
    появляется@_@
     
    #1 j-prof, 24 Feb 2011
    Last edited: 24 Feb 2011
  2. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    j-prof ты специально так пишешь что тебя трудно понять, или оно само так выходит?
    А по сабжу ну так добавь
    Content-Type: application/x-www-form-urlencoded, сервак не поймет что ты ему шлешь.
     
  3. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    ура ура ура
    я добавлял в коде но в том месте почемут не добавлялось
    ща в другом месте добавил терь все ок :D
    Ы

    ЗЫ все успешно
    бля еслиб знал что так просто то раньшеб занялся :D
    щикарно
     
    #3 j-prof, 24 Feb 2011
    Last edited: 24 Feb 2011
  4. K0rINf

    K0rINf Member

    Joined:
    20 Jan 2009
    Messages:
    40
    Likes Received:
    5
    Reputations:
    6
    Ну мог бы код выложить!!)
     
  5. KATYA

    KATYA Active Member

    Joined:
    9 Feb 2009
    Messages:
    236
    Likes Received:
    121
    Reputations:
    9
    Тут глянь http://kairos-blog.ru/ в первом посте есть dll ка для ВК
     
  6. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    выложу сегонь
    обосрут ток конешн :D
     
  7. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    так не интересно по хорошему над вообще свой код
    писать а тут его даже не глянешь

    вот кому интересно
    Code:
     
    public void LogIn(string login, string pass)
            {
                string pattern = "<input type='hidden' name='s' value='(?<cook>.*)' />";//регулярка для выцепления кук remixsid 
                string remixsid = string.Empty;
                Request r = new Request("http://login.vk.com/?act=login&to=&from_host=m.vkontakte.ru&pda=1");
                //устанавливаем пост параметры
                r["email"] = login;
                r["pass"] = pass;
                r.Method = ReqType.POST;
                r.AutoRedirect = false;
                r.Refferer = "http://m.vkontakte.ru/login?op=slogin";
                r.GetResp(true);
                remixsid = Regex.Match(r.Page, pattern).Groups["cook"].Value;//собственно выцепляем куки из странички;)
                Cookies = string.Format("remixchk=5; remixsid={0}", remixsid);//вот и все с этими куками терь можно спокойно гулять по вк;)
            }
    
    а вот мой НЕДОПИСАНЫЙ класс Request
    Code:
     
    enum ReqType : byte
        { 
            POST,
            GET
        }
        sealed class Request
        {
            #region поля
            private Object locker = new object();
            public bool SynsCookie = true;
            private Encoding enc = Encoding.GetEncoding(1251);
            public string cookies = string.Empty;
            public string Page { get; private set; }
            private HttpWebRequest req;
            private HttpWebResponse resp;
            private string querystr = string.Empty;
            private Dictionary<string, string> query = new Dictionary<string, string>();                   
            #endregion
            #region свойства
            public string this[string name]
            {
                get { return query[name]; }
                set
                {
                    if (query.ContainsKey(name))
                        query[name] = value;
                    else
                        query.Add(name, value);
                }
            }
            public string Uri 
            {
                get { return req.Address.AbsolutePath; }
                set { ReqInit(value); }
            }
            public ReqType Method
            {
                get { return (ReqType)Enum.Parse(typeof(ReqType),req.Method); }
                set 
                {
                    req.Method = value.ToString();
                    req.ContentType = "application/x-www-form-urlencoded";
                }
            }
            public string Proxy
            {
                set { req.Proxy = new WebProxy(value); }
            }
            public bool AutoRedirect
            {
                get { return req.AllowAutoRedirect; }
                set { req.AllowAutoRedirect = value; }
            }
            public string Refferer
            {
                get { return req.Referer; }
                set { req.Referer = "http://m.vkontakte.ru/login?op=slogin"; }
            }
            #endregion
            public Request(string url)
            {
                ReqInit(url);
            }
            public HttpWebResponse GetResp(bool getpage)
            {
                if (cookies != string.Empty)
                req.Headers[HttpRequestHeader.Cookie] = cookies;
                if (Method == ReqType.POST)
                {
                    byte[] buff = enc.GetBytes(LoadQuery());
                    req.ContentLength = buff.Length;
                    req.GetRequestStream().Write(buff,0,buff.Length);                 
                }
                req.Expect = null;
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    
                if(!getpage)
                return resp;
    
                using (StreamReader reader = new StreamReader(resp.GetResponseStream(), enc))
                {
                    Page = reader.ReadToEnd();
                }
                if(SynsCookie)
                cookies = resp.Headers[HttpResponseHeader.SetCookie];
                return resp;
            }   
    
            public string LoadQuery()
            {
                foreach (KeyValuePair<string, string> kv in query)
                {
                    querystr += string.Format("&{0}={1}", kv.Key, kv.Value);
                }
                querystr = querystr.Remove(0, 1);
                return querystr;
            }
            private void ReqInit(string url)
            {
                req = (HttpWebRequest)WebRequest.Create(url);
                req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
                req.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.7");
                req.ServicePoint.Expect100Continue = false; 
                req.Headers.Add(HttpRequestHeader.KeepAlive, "115");
                req.UserAgent = "Mozilla/5.0 Firefox/3.6.8";
                req.AutomaticDecompression = DecompressionMethods.GZip; 
            }
        }
    
     
    #7 j-prof, 25 Feb 2011
    Last edited: 25 Feb 2011
  8. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    вот ток помогите спарсить друзей никогда не был силён в написании регулярок
    но вроде все правильно но нифига не пашет почемут
    Code:
    public List<string> ParseFrends()
            {
                List<string> frends = null;
                string pattern = "<div class=\"labeled\"><a href=\"(?<id>.*)\" onclick=\"return nav.go(this, event);\">(.*)</a></div>";
                Request r = new Request("http://vkontakte.ru/friends");
                r.cookies = Cookies;
                r.GetResp(true);
                MatchCollection mc = Regex.Matches(r.Page, pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
                frends = new List<string>(mc.Count);
                foreach (Match m in mc)
                {
                    frends.Add(string.Format("http://vkontakte.ru{0}", m.Groups["id"].Value));
                }
                return frends;
            } 
    
     
  9. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    твоё возвращает не то0_о
    а мой метод почему не пашет интересно;(
     
  10. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    ой точно эт я там затупил кое где :D
    но всеж интересно почему у мя не пашет*redface*
     
  11. j-prof

    j-prof Banned

    Joined:
    29 Aug 2010
    Messages:
    321
    Likes Received:
    11
    Reputations:
    -4
    опа вабще пасиб