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