Авторизация на ru.grepolis.com C# + .NET

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Seganapa, 14 Dec 2012.

  1. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Пытаюсь написать код авторизации на ru.grepolis.com

    Но застрял на втором шаге.
    Первым отправляю Get запрос, получаю куки:

    Code:
    request = (HttpWebRequest)HttpWebRequest.Create("http://ru.grepolis.com");
                    //request.Proxy = new WebProxy("127.0.0.1", 8888);
    
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0";
                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                    request.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
                    request.KeepAlive = true;
                    
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
                    string sCookies = "";
                    if (!String.IsNullOrEmpty(response.Headers["Set-Cookie"]))
                    {
                        sCookies = response.Headers["Set-Cookie"];
                    }
    Затем, используя полученные куки отправляю Post запрос:
    Code:
    request = (HttpWebRequest)HttpWebRequest.Create("http://ru.grepolis.com/start/index?action=login_from_start_page");
                    request.Method = "POST";
                    request.Referer = "http://ru.grepolis.com";
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0";
                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                    request.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
                    request.KeepAlive = true;
                    request.ContentType = "application/x-www-form-urlencoded";
    
                    // передаем куки, полученные в предыдущем запросе
                    if (!String.IsNullOrEmpty(sCookies))
                    {
                        request.Headers.Add(HttpRequestHeader.Cookie, sCookies);
                    }
    
    
                    request.AllowAutoRedirect = true;
    
                    // Формируем строку с параметрами
                    string secondStepForm = "json={\"name\":\"*********\",\"password\":\"***********\",\"passwordhash\":\"\",\"autologin\":false,\"window_size\":\"1263x535\"}";
    
                    // передаем параметры
                    byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
                    request.ContentLength = EncodedPostParams.Length;
    
                    // Записываем данные в поток
                    request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length);
    
                    request.GetRequestStream().Close();
                    // делаем запрос
                    response = (HttpWebResponse)request.GetResponse();
    
    Но он не проходит.
    В чем может быть причина? Неправильные параметры Post или куки или еще что? Самому не получается разобраться.

    Заголовки вроде идентичные с браузером передаю.

    Мои куки почему то имеют другой вид, нежели чем передает браузер... Может в этом проблема?

    Вот куки которые передает браузер:
    PHPSESSID=JoHVf8NpzGf-uhyY8FXS91; cid=954932142; portal_tid=1355466714195-86254; portal_data=portal_tid=1355466714195-86254

    А вот мои куки:
    PHPSESSID=ssuvQVWUBcQqSlViFw-SE2; path=/,cid=308647358; expires=Sun, 14-Dec-2014 06:35:43 GMT; path=/

    Почему так?
     
    #1 Seganapa, 14 Dec 2012
    Last edited: 14 Dec 2012
  2. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
    Ты не правильно используешь Cookie, не нужно передавать path, expires - это дополнительная инфа, которую использует браузер. Вместо того что бы вручную определять Cookie использую свойства CookieContainer.
    Cookie portal_tid и portal_data формируются с помощью javascript-a, но скорей всего они нужны для трекинга(1355466714195 - время в UNIX timestamp - new Date().getTime()) или показа рекламы, а не для логина.