Jak znaleźć security token przy zakładaniu tematu na vBulletin?

0

Witam.
Przy każdym przeładowaniu strony security token się zmienia, więc nie mogę (chyba?) znaleźć go przez wyrażenia regularne. Ma on na przykład taką postać: 1301767251-1a5636806411d07afb5cfde72c4f0978a1cf4415.

Bez tego tokenu nie da się napisać nowego tematu. W Internecie nigdzie nie ma informacji o czymś takim. Kod:

public void WriteNewTopic(string subject, string message)
        {
            _webRequest = (HttpWebRequest)WebRequest.Create(this.Url + "newthread.php?do=newthread&f=" + AppsId);
            _webRequest.Headers.Add("Cookie", this.Cookie);
            _webRequest.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0";
            _webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            _webRequest.ContentType = "application/x-www-form-urlencoded";
            _webRequest.Referer = this.Url + "viewforum.php?f=" + this.AppsId;
            _webRequest.Headers.Add("Accept-Charset", "ISO-8859-2,utf-8;q=0.7,*;q=0.7");
            _webRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
            _webRequest.Headers.Add("Accept-Language", "pl,en-us;q=0.7,en;q=0.3");
            _webRequest.Method = "POST";
            _webRequest.CookieContainer = _cookieContainer;
            _webRequest.AllowAutoRedirect = false;

            string values =
                "do=postthread&f=" + AppsId +
                "&securitytoken=1301767251-1a5636806411d07afb5cfde72c4f0978a1cf4415" + 
                "&wysiwyg=0&subject=" + subject +
                "&message=" + message;

            _webRequest.ContentLength = values.Length;

            byte[] buffer = new byte[256];
            ASCIIEncoding ascii = new ASCIIEncoding();
            buffer = ascii.GetBytes(values);
            using (Stream stream = _webRequest.GetRequestStream())
            {
                stream.Write(buffer, 0, buffer.Length);
            }

            HttpWebResponse c;
            try
            {
                c = (HttpWebResponse)_webRequest.GetResponse();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

            if (c.Cookies.Count != 0)
            {
                this.Cookie = string.Empty;
                foreach (Cookie cook in c.Cookies)
                {
                    cook.HttpOnly = true;
                    Cookie = Cookie + cook + "; ";
                }
            }
        }

Pomocy!

0
carck3r napisał(a)

Przy każdym przeładowaniu strony security token się zmienia, więc nie mogę (chyba?) znaleźć go przez wyrażenia regularne.

To od czego są według ciebie REGEXPy, jak nie od szukania właśnie zmiennych wartości? [rotfl]

0
Demonical Monk napisał(a)
carck3r napisał(a)

Przy każdym przeładowaniu strony security token się zmienia, więc nie mogę (chyba?) znaleźć go przez wyrażenia regularne.

To od czego są według ciebie REGEXPy, jak nie od szukania właśnie zmiennych wartości? [rotfl]

Chodzi mi o to, że nie mogę za jednym razem pobrać GET'em, pobrać security token i wysłać POSTem.
To napisz mi proszę metodę, która najpierw pobiera kod źródłowy strony przez GET, następnie z tej samej strony wysyła POST'em wszystkie dane (temat, wiadomość, security token etc.).
Mi coś się nie udaję :).

Wyr. reg. będzie oczywiście bardzo proste:

            //Match match = Regex.Match(sourceCode, "var SECURITYTOKEN = \"(.*)\""); // var SECURITYTOKEN = "1301771420-354a766e96ce7e3922e2e73eaa3ebc2bca5b4ff9";
1

A jaki w tym problem? Najpierw pobierasz token, potem wysyłasz. Zadbaj tylko o to, żeby działo się to w ramach jednej sesji (przekazując session id w ciastku czy url) i będzie to działać.

0

Wszystko fajnie i pięknie, najpierw pobieram GET'em formularz, odczytuję security token, wysyłam POST'em. Działa. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1