Httpwebrequest problem

0

Witam wszystkich.

W gladiatus.pl (nie wiem czy wiecie co to za gra) zrobiłem logowanie
za pomocą httpwebrequest. Gdy wysyłam formularz z danymi do logowania to
normalnie się loguje, pobieram przy tym sh(kod, który zmienia się co
logowanie) i próbuje później zaatakować potwora poprzez link (Metoda
GET), lecz gdy używam tego linku to dostaje odpowiedź, że postać nie
jest zalogowana co jest niemożliwe. Znacie może powód? Dołączę kod, żeby
było jaśniej, jeśli możecie to proszę o pomoc.

Ten kod jest na zalogowanie się na stronę, loguje na 100%, gdyż podaje kod sh, który jest dostępny tylko po zalogowaniu.

                        var request =
                System.Net.WebRequest.Create(
                    "http://s22.gladiatus.pl/game/index.php?mod=start&submod=login") as
                HttpWebRequest; //url uzyskaliśmy dzięki charlesowi
            //var ciastka = new System.Net.CookieContainer();
            request.Method = "POST"; //tym razem wysyłamy dane
            request.ContentType = "application/x-www-form-urlencoded"; //dane jakiego rodzaju wysyłamy
            request.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0";
            request.CookieContainer = dCookies;
            request.KeepAlive = true;
            using (var stream = request.GetRequestStream()) //strumień pozwoli nam na wpisanie danych
            {
                byte[] buffer =
                    Encoding.UTF8.GetBytes(
                        string.Format(
                            "name=asd&pass=asd&login_server=s22.gladiatus.pl")); //w stream dane wysyłamy w postaci bajtów
                stream.Write(buffer, 0, buffer.Length); //wysyłamy cała tablicę
            }
            using (var response = request.GetResponse() as HttpWebResponse)
            {
                dCookies.Add(response.Cookies);
                using (var sr = new System.IO.StreamReader(response.GetResponseStream()))
                {
                    kodStrony = sr.ReadToEnd();

                    //timer1.Enabled = true;
                    MessageBox.Show(kodStrony);
                    //string gowno = "<input id='loguj' type='submit' value='Zaloguj'/>";
                    //teraz możemy sprawdzić, czy logowanie przebiegło prawidłowe itd.
                    System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(kodStrony,
                                                                                      "sh=(.*)");
                    System.Text.RegularExpressions.Match match1 = System.Text.RegularExpressions.Regex.Match(kodStrony,
                                                                  "cooldown_bar_text_expedition(.*)");
                    if (!match.Success) //nie znaleźliśmy
                        return;
                    string koniec = match.Groups[0].Value;
                    sh = koniec.Substring(3, 32);
                    MessageBox.Show(sh);
                    if (!match1.Success)
                        return;
                    string bbb = match1.Groups[0].Value;
                    MessageBox.Show(bbb);
                }
            }

Dla pewności sprawdzam jeszcze raz czy string sh ma ten ciąg znaków no i
przy wyświetlaniu kodustrony przez messagebox wyskakuje strona dostępna
dla zalogowanych, kompletnie nie wiem o co chodzi i co z tym zrobić,
próbowałem już zmieniać ciasteczka, patrzyłem także czy wysyła dobre
dane w tym linku i rzeczywiście wszystko idzie ok ale odpowiedź serwera
jest "strona dostępna dla zalogowanych"

            MessageBox.Show(sh);
            string authKey; //posłuży nam do przechowania auth_key
            var request = System.Net.WebRequest.Create("http://s22.gladiatus.pl/game/ajax.php?mod=location&submod=attack&location=3&stage=1&cooldown=0&a=1364770951854&sh=" + sh) as System.Net.HttpWebRequest;
            //tworzymy nowy obiekt typu WebRequest i rzutujemy go na HttpWebRequest, metoda Create przyjmuje jako parametr adres strony
            request.Method = "GET"; //nie wysylamy danych
            //var ciastka = new System.Net.CookieContainer(); //tworzymy nasz pojemnik na ciastka
            request.CookieContainer = dCookies;
            using (var response = request.GetResponse() as System.Net.HttpWebResponse)
            //rozpoczynamy "pobieranie" odpowiedzi i rzutujemy ją z WebResponse na HttpWebResponse
            {
                dCookies.Add(response.Cookies); //dodajemy do pojemnika ciastka z nagłówka Set-Cookie
                using (var sr = new System.IO.StreamReader(response.GetResponseStream()))
                //otwieramy strumień, w którym czytamy odpowiedź
                {
                    string kodStrony1 = sr.ReadToEnd();
                    MessageBox.Show(kodStrony1);
                    System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(kodStrony1,
                                                                                                            "Zadania");
                    System.Text.RegularExpressions.Match czas = System.Text.RegularExpressions.Regex.Match(kodStrony1,
                                                                                        "Na wyprawę");//"cooldown_bar_text_expedition(.*)");
                    if (!match.Success) //nie znaleźliśmy
                        return;
                    authKey = match.Groups[0].Value;
                    MessageBox.Show(authKey);

                    if (!czas.Success)
                        return;
                    string asd = czas.Groups[0].Value;
                    //string tak = asd.Substring(30);
                    //MessageBox.Show(tak.Replace("</div>", ""));
                    MessageBox.Show(asd);
                }
            }

Moje drugie pytanie jest następujące, jesteśmy na takiej strony http://gladiatus.pl/game/ .Aby wejść w zakładkę media przy pomocy httpwebrequest, muszę pobrać adres strony, która znajduję się w zakładce media i wysłać zapytanie za pomocą GET czy jesteśmy w tej zakładce? Może da się zrobić tak aby wejść na stronę główną czyli tutaj http://gladiatus.pl/game/ i w tym zapytaniu jakoś wysłać zadanie aby kliknęło w coś co wywoła stronę z zakładki media. Nie bardzo lubię operować tylko na linkach i nie we wszystkim mogę to zrobić dlatego pytam czy można zrealizować ten drugi sposób, bardzo mi się to przyda, gdyż czasami wejście za pomocą adresu nie działa tak jak chcę i muszę wchodzić ręcznie .

Dziękuje i pozdrawiam

0

Odświeżam, potrafi ktoś mi pomóc? Przez ten błąd nie mogę ruszyć dalej z pracą a nie potrafię tego naprawić :(

0

Http jest protokołem bezstanowym, dlatego przegladarka zawsze musi przedstawić i wysłać odpowiednie dane odnośnie sesjii coby serwer mógł ją zidentyfikować. Wszystko to leci w zapytaniu. W twoim zapytaniu pewnie czegoś brakuję. Zobacz sobie co jak wygląda zapytanie produkowane na przykład przez firefox, polecam firebug'a i zobacz co wysyłasz ty. Porównaj powinienieś znaleŹć wtedy czemu uważa Cię za nie zalogowanego.

0

Porównywałem to wszystko gdy wysyłam ręcznie i za pomocą httpwebrequest. Obie rzeczy idą tak samo, wszystko jest tak samo uzupełnione mimo tego przy requescie występuje ten błąd i nie wiem co mam robić :/

0

Jednak coś przeoczyłeś, bo inaczej by działało. Ustaw referrer, sprawdź czy javascript nie dodaje jakieś ukrytych pól. W tym drugim kodzie nie ustawiasz UserAgenta, etc.

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