Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[PROBLEM] httpwebrequest


Rekomendowane odpowiedzi

Opublikowano

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ę klikać ręcznie .

 

Dziękuje i pozdrawiam

Jedyny działający bot do Gladiatusa 2015!!!

https://www.facebook.com/Gbot.vertek

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...