Witam
Dziś zacząłem się bawić HttpWebRequest oraz WebRequest w C#. Postanowiłem napisać aplikację, która sama będzie się logowała na określoną stronę.
Aby się zalogować trzeba wpisać nazwę użytkownika oraz hasło, aczkolwiek w formularzu jest ukryte pole, dla którego wartość zmienia się co ok. 5-10 minut. Na google chrome (na innych przeglądarkach też) po odświeżeniu strony wartość zostaje ta sama.

Problem się rozpoczyna tutaj - w C#, gdy za każdym razem wartość tego jest inna, przez co każda próba logowania jest nieudana.

Pobieranie ukrytej wartości (auth_token)

public string getToken()
        {
            string response = HttpGet("http://ask.fm/account/stream");
            string token = Regex.Match(response, @"encodeURIComponent\('(.+)'\)").Groups[1].Value;
            return token;
        }

Proces logowania

public string Login()
        {
            string response = HttpGet("http://ask.fm/account/stream");
            string token = Regex.Match(response, @"encodeURIComponent\('(.+)'\)").Groups[1].Value;
            string parameters = "login=tarasverq%40yandex.ru&password=121995&follow=&like=&back=&remember_me=1&authenticity_token=" + System.Net.WebUtility.UrlEncode(token);
            response = HttpPost(parameters);
            return response;
        }

Plus dwa dodatkowe kody:

string HttpPost(string parameters)
        {
            string targetUrl = "http://ask.fm/";
            string sourceCode = string.Empty;
            CookieCollection cookiesS = new CookieCollection();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUrl);
            request.CookieContainer = cookies;
            request.CookieContainer.Add(cookiesS);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            cookiesS = response.Cookies;
            var postBytes = parameters;

            targetUrl = "http://ask.fm/session";
            HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(targetUrl);
            getRequest.CookieContainer = cookies;
            getRequest.CookieContainer.Add(cookiesS); //recover cookies First request
            getRequest.Method = WebRequestMethods.Http.Post;
            getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
            getRequest.AllowWriteStreamBuffering = true;
            getRequest.ProtocolVersion = HttpVersion.Version11;
            getRequest.AllowAutoRedirect = true;
            getRequest.ContentType = "application/x-www-form-urlencoded";
            byte[] byteArray = Encoding.ASCII.GetBytes(postBytes);
            getRequest.ContentLength = byteArray.Length;
            Stream newStream = getRequest.GetRequestStream(); //open connection
            newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
            newStream.Close();
            HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
            using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
            {
                sourceCode = sr.ReadToEnd();
            }
            return sourceCode;
        }
public static string HttpGet(string URI)
        {
            System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
            System.Net.WebResponse resp = req.GetResponse();
            System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
            return sr.ReadToEnd().Trim();
        }

Podczas klikania przycisku (button1) robię takie coś - textBox1.Text = Login().toString(); w celu sprawdzenia czy się zalogowałem, aczkolwiek za każdym razem jest strona do logowania.

Moje pytanie brzmi tak - czy da się zrobić coś takiego, aby za każdym razem gdy pobieram ten auth_token miał on taką samą wartość?

Na początku działałem na własnych kodach, ale ostatecznie pobrałem jakieś z neta.