Авторизация на C# через HttpWebRequest[Need Help]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cheater_man, 6 Sep 2010.

  1. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Нашел пример авторизации
    подделал под себя:
    Code:
    HttpWebResponse result = null;
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.24video.net/auth/login");
                req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WebMoney Advisor; MRA 5.3 (build 02560); MRSPUTNIK 2, 0, 1, 54 SW; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                req.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                req.Headers.Add("Accept-Language", "ru");
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                byte[] SomeBytes = null;
                string FormParams = "username=Tester&password=tester";
                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[] cookieVal = null;
                if (result.Headers["Set-Cookie"] != null)
                    cookieVal = result.Headers["Set-Cookie"].Split(new char[] { ',' });
    
                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();
                foreach (string cook in cookieVal)
                {
                    string[] cookie1 = cook.Split(new char[] { ';' });
                    if (cookie1.Length < 2)
                        continue;
                    cookie.Add(new Cookie(cookie1[0].Split(new char[] { '=' })[0], cookie1[0].Split(new char[] { '=' })[1],
                                cookie1[1].Split(new char[] { '=' })[1], cookie1.Length > 2 ? cookie1[2].Split(new char[] { '=' })[1] : ""));
                }
    
    Но сдесь какая-то проблема с кукисами:
    Code:
    cookie.Add(new Cookie(cookie1[0].Split(new char[] { '=' })[0], cookie1[0].Split(new char[] { '=' })[1],
                                cookie1[1].Split(new char[] { '=' })[1], cookie1.Length > 2 ? cookie1[2].Split(new char[] { '=' })[1] : ""));
    
    пишет
    Code:
    The 'Domain'='/' part of the cookie is invalid.
    
    WTF?
    p.s. Может кто-нибудь даст свой примерчик авторизации с кукисами?
     
  2. FEV

    FEV Member

    Joined:
    23 Sep 2009
    Messages:
    15
    Likes Received:
    7
    Reputations:
    0
    в классе CookieContainer есть ошибка и он работает неправильно. Куки нужно парсить из resp.Headers[HttpResponseHeader.SetCookie]
     
  3. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
  4. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    с авторизацией разобрался
    Code:
     try
                {
                    req = (HttpWebRequest)HttpWebRequest.Create("http://www.24video.net/auth/login");
                    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WebMoney Advisor; MRA 5.3 (build 02560); MRSPUTNIK 2, 0, 1, 54 SW; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                    req.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                    req.Headers.Add("Accept-Language", "ru");
                    req.Method = "POST";
                    req.AllowAutoRedirect = false; // Важный пункт
                    req.ContentType = "application/x-www-form-urlencoded";
                    byte[] SomeBytes = null;
                    string FormParams = "username=Tester&password=tester";
                    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();
                    cookieVal = result.GetResponseHeader("Set-Cookie"); // забираем куки
                    ReceiveStream = result.GetResponseStream();
                    sr = new StreamReader(ReceiveStream, encode);
                    answer = sr.ReadToEnd();
                }
                catch (Exception exc)
                {
                    //обрабатываете ошибки
                    MessageBox.Show(exc.ToString());
                }
                finally
                {
                    if (sr != null) sr.Close();
                    if (ReceiveStream != null) ReceiveStream.Close();
                    if (result != null) result.Close();
                }
    
    Теперь возник вопрос как автоматизировать процесс загрузки видео по ссылке на 24video.net с помощью httpwebrequest?
    Уже 2 неделю голову ломаю, ну никак меня не допрет как там(
    Ребят помогите пожалуйста как время будет. Ну уж очень надо.Заранее всем благодарен.
    пс если нужно могу скинуть свои наработки.
     
  5. [х26]VОLАND

    [х26]VОLАND Elder - Старейшина

    Joined:
    7 Jun 2006
    Messages:
    513
    Likes Received:
    756
    Reputations:
    218
    Работай с сокетами.
     
  6. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    а что через HttpWebRequest неполучится?

    вот мы тут уже обсуждали но пока никакого выхода не нашли :(