Cookie, C#

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by F&D, 27 Jun 2010.

  1. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    Приветствую всех!
    Уважаемые коллеги, помогите пожалуйста вот в таком вопросе:

    Я реализую приложение, которое организует авторизацию на сайте с отображение куков, и выводит код html авторизированной страницы в textBox.

    Вот код:

    Code:
                StringBuilder msg = new StringBuilder(String.Empty);
                Uri st = new Uri("http://www.deviantart.com");
                string reqString = String.Format("username={0}&password={1}", username, password);
                byte[] requestData = Encoding.UTF8.GetBytes(reqString);
                CookieContainer cc = new CookieContainer();
                var request = (HttpWebRequest)WebRequest.Create(thURI);
                request.Proxy = null;
                request.AllowAutoRedirect = false;
                request.CookieContainer = cc;
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                
                using (System.IO.Stream s = request.GetRequestStream())
                    s.Write(requestData, 0, requestData.Length);
                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    foreach (var str in cc.GetCookies(st))
                    {
                        msg.Append(str);
                    }
                    
                    textBox1.AppendText(msg.ToString());
    
                }
    
                WebRequest req = WebRequest.Create("http://www.deviantart.com/?loggedin=1");
                req.Credentials = CredentialCache.DefaultCredentials;
                HttpWebResponse respons = (HttpWebResponse)req.GetResponse();
                Stream dataStream = respons.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
                textBox3.AppendText(responseFromServer);
                reader.Close();
                dataStream.Close();
                respons.Close();
    
    Приложение работает, но не корректно. Если быть точнее авторизация проходит, и выдается html страница, НО не авторизированная.

    Как можно исправить данную проблему, исходя и моего кода?
    Возможно использовать полученную сессию куков, и запихнуть их на отображение html страницы? Но вот как это сделать... :(

    HELP Please.
     
    #1 F&D, 27 Jun 2010
    Last edited: 28 Jun 2010
  2. zORG

    zORG New Member

    Joined:
    5 Jun 2010
    Messages:
    44
    Likes Received:
    2
    Reputations:
    0
    Ну так к запросу на http://www.deviantart.com/?loggedin=1
    надо куки добавить, полученные при авторизации, а ты этого не делаешь.
     
  3. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    Так вот я не могу "вдуплить" куда их впихнуть :( :confused:
     
  4. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    Итак, выход найден.

    Итог выглядит так:
    Code:
    string username = "vasya";
                string password = "12345";
    
    var msg = new StringBuilder(String.Empty);
    var st = new Uri("http://www.deviantart.com");
    var reqString = String.Format(
        "reusetoken=1&username={0}&password={1}", 
        username, password);
    var requestData = Encoding.UTF8.GetBytes(reqString);
    var cc = new CookieContainer();
    var request = (HttpWebRequest) 
        WebRequest.Create(
            "https://www.deviantart.com/users/login"); [B][COLOR=LemonChiffon]1[/COLOR][/B]
    request.Credentials = CredentialCache.DefaultCredentials;
    request.AllowAutoRedirect = false;
    request.KeepAlive = true;
    request.CookieContainer = cc;
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
    request.ContentLength = requestData.Length;
    
    using (var s = request.GetRequestStream())
    {
        s.Write(requestData, 0, requestData.Length);
    }
    
    var webResponse = request.GetResponse();
    using (var stream = new StreamReader(webResponse.GetResponseStream()))
    {
        var content = stream.ReadToEnd();
        textBox3.AppendText(content);
    
        foreach (var str in cc.GetCookies(st))
        {
            msg.Append(str);
        }
    
        textBox1.AppendText(msg.ToString());
    }
    
    HttpWebRequest req = (HttpWebRequest) WebRequest.Create("http://www.deviantart.com/?loggedin=1");
    req.CookieContainer = cc;  [COLOR=LemonChiffon][B]2[/B][/COLOR]
    req.Credentials = CredentialCache.DefaultCredentials;
    HttpWebResponse respons = (HttpWebResponse)req.GetResponse();
    Stream dataStream = respons.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseFromServer = reader.ReadToEnd();
    textBox2.AppendText(responseFromServer);
    reader.Close();
    dataStream.Close();
    respons.Close();
    
    
    При логине используется протокол https вместо http 1. И при втором обращении к сайту нужно использовать CookieContainer от первого обращения 2.