Autor Wątek: Logowanie na stronę  (Przeczytany 11101 razy)

Offline adsko

  • Użytkownik

# Listopad 29, 2011, 21:39:28
Znalazłem kod który powinien mi się pomóc zalogować na stronę, ale coś mi w nim nie działa. Na pewno źle wysyłam "           string loginData = String.Format("_action={0}&url={1}&idu={2}&serwis={3}&enticket={4}&othk={5}&login_username={6}&login_password={7}&countTest={8}",
                         "login", "%2F", "100", "wp.pl", "", "0", login, password, "1");"
ponieważ nie wiem zbytnio o co w tym chodzi.
Jeżeli uda mi się zalogować to już powinienem sobie poradzić z dalszym działaniem programu, więc proszę o pomoc.
            //GET
            CookieContainer cookies = new CookieContainer();

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://dziennik.librus.pl");
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
            request.Method = "GET";
            request.CookieContainer = cookies;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            response.Close();

            //POST
            request = (HttpWebRequest)HttpWebRequest.Create("https://dziennik.librus.pl/loguj");
            request.Method = "POST";
            request.CookieContainer = cookies;
            string login = "xxx";
            string password = "xxx";
            string loginData = String.Format("_action={0}&url={1}&idu={2}&serwis={3}&enticket={4}&othk={5}&login_username={6}&login_password={7}&countTest={8}",
                         "login", "%2F", "100", "wp.pl", "", "0", login, password, "1");
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] loginDataBytes = Encoding.ASCII.GetBytes(loginData);
            Stream postData = request.GetRequestStream();
            postData.Write(loginDataBytes, 0, loginDataBytes.Length);
            postData.Close();
            StreamWriter sw = new StreamWriter("D:\\nazwa_pliku2.html", true);
            Stream stream = response.GetResponseStream();
            webBrowser1.DocumentText = (new StreamReader(stream, Encoding.GetEncoding("iso-8859-2"))).ReadToEnd();
            stream.Close();

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline alexsoft

  • Użytkownik

# Listopad 29, 2011, 21:44:33
Polecam lekturę:
String.Format

Offline adsko

  • Użytkownik

# Listopad 29, 2011, 22:00:00
Wiem że to jest źle bo ten kod znalazłem i nie wiem jak tą linię przerobić, aby działała z stroną https://dziennik.librus.pl/loguj Kolejnym moim problemem jest sama strona, która z jakiegoś powodu automatycznie przekierowuje mnie(nawet na przeglądarce chrome) z w/w strony na dziennik.librus.pl i dopiero po kliknięciu w button przenosi mnie na odpowiednią stronę. Po prostu nie wiem czym jest to spowodowane:/

Offline adsko

  • Użytkownik

# Listopad 30, 2011, 00:44:02
          CookieContainer cookies = new CookieContainer();

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://dziennik.librus.pl/loguj");
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
            request.Method = "GET";
            request.CookieContainer = cookies;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            response.Close();

            //POST
            request = (HttpWebRequest)HttpWebRequest.Create("https://dziennik.librus.pl/loguj");
            request.Method = "POST";
            request.CookieContainer = cookies;
            string action = "/login";
            string login = "xxx";
            string password = "xxx";
            StringBuilder data = new StringBuilder();
            data.Append("action=" + HttpUtility.UrlEncode(action));
            data.Append("&login=" + HttpUtility.UrlEncode(login));
            data.Append("&passwd=" + HttpUtility.UrlEncode(password));
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] loginDataBytes = UTF8Encoding.UTF8.GetBytes(data.ToString());
            Stream postData = request.GetRequestStream();
            StreamWriter sw2 = new StreamWriter("D:\\nazwa_pliku2.html", true);
            sw2.WriteLine(loginDataBytes);
            postData.Write(loginDataBytes,0, loginDataBytes.Length);
            postData.Close();
            StreamWriter sw = new StreamWriter("D:\\nazwa_pliku3.html", true);
            response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            sw.WriteLine(new StreamReader(stream, Encoding.GetEncoding("iso-8859-2")));
            stream.Close();
            response.Close();
            System.Console.ReadKey();
Jak na razie wyszedł mi taki kod, coś próbuję tutaj zrobić lecz nie mam już do tego zbytnio siły, nie wiem dlaczego nie mogę po prostu przejść na adres https://dziennik.librus.pl/loguj :/

Offline Xirdus

  • Redaktor

# Listopad 30, 2011, 16:28:45
Jakbyś nie zauważył, ta strona używa protokołu HTTPS, czyli szyfrowanego.

Offline Kos

  • Użytkownik
    • kos.gd

# Listopad 30, 2011, 16:53:52

Offline Xirdus

  • Redaktor

# Listopad 30, 2011, 16:58:48
Kolejnym moim problemem jest sama strona, która z jakiegoś powodu automatycznie przekierowuje mnie(nawet na przeglądarce chrome) z w/w strony na dziennik.librus.pl i dopiero po kliknięciu w button przenosi mnie na odpowiednią stronę. Po prostu nie wiem czym jest to spowodowane:/
Prawdopodobnie chodzi o referera.

Offline adsko

  • Użytkownik

# Listopad 30, 2011, 17:02:14
Własnie wiem że jest https, i tu jest problem, niby ten czyta https, ale mam problem do przejścia i wysłanie informacji dla skryptu logowania, i to jest mój problem.

Offline adsko

  • Użytkownik

# Listopad 30, 2011, 19:50:12
Jak obsłużyć tego referera?? Jakiś przykładowy kod jak byście podali był bym wdzięczny:)

Offline Xirdus

  • Redaktor

# Listopad 30, 2011, 20:21:04
Ósme od góry. Zajęło mi to dosłownie minutę.

Offline adsko

  • Użytkownik

# Listopad 30, 2011, 22:37:07
Sorki że tak trolluje, ale naprawdę uczę się dopiero.
Udało mi się przejść na stronę, ale teraz nie wysyłam nic do skryptu loguj:/ Oto kod:
            request = (HttpWebRequest)HttpWebRequest.Create("https://dziennik.librus.pl/loguj");
            request.Referer = "https://dziennik.librus.pl/loguj";
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)request.GetResponse();
            request.Method = "POST";
            request.CookieContainer = cookies;
            StringBuilder data = new StringBuilder();
            string loginData = String.Format("tutaj kod do wysłania");
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] loginDataBytes = Encoding.ASCII.GetBytes(loginData);
            Stream postData= myHttpWebResponse.GetResponseStream();
            StreamReader streamRead = new StreamReader(postData);
            Char[] readBuffer = new Char[256];
            int count = streamRead.Read(readBuffer, 0, 256);
            Console.WriteLine("\nThe contents of HTML page are.......");
            while (count > 0)
            {
                String outputData = new String(readBuffer, 0, count);
                Console.Write(outputData);
                count = streamRead.Read(readBuffer, 0, 256);
            }
            postData.Close();
Jak coś to wiem już dokładnie co wysłać, przechwyciłem pakiet, to co wysyłam jest w "Tutaj jest kod do wysłania".
Z góry dziękuję za pomoc i cierpliwość

Offline adsko

  • Użytkownik

# Grudzień 01, 2011, 20:39:36
            request = (HttpWebRequest)HttpWebRequest.Create("https://dziennik.librus.pl/przegladaj_oceny/uczen");
            request.Referer = "https://dziennik.librus.pl/loguj";
            request.Method = "POST";
            request.CookieContainer = cookies;

            loginData = String.Format("");
            request.ContentType = "application/x-www-form-urlencoded";
            loginDataBytes = Encoding.ASCII.GetBytes(loginData);
            postData = request.GetRequestStream();
            sw2.WriteLine(loginDataBytes);
            postData.Write(loginDataBytes, 0, loginDataBytes.Length);
            postData.Close();
            response = (HttpWebResponse)request.GetResponse();
            StreamWriter kolin = new StreamWriter("D:\\kolin.html", true);
            stream = response.GetResponseStream();
            kolin.WriteLine(new StreamReader(stream, Encoding.GetEncoding("UTF-8")));
            kolin.Close();
            sw.Close();
            sw2.Close();
            stream.Close();
            response.Close();
        }
Mam coś takiego i chcę zapisać źródło strony do pliku, ale coś nie działa:/ wie ktoś może jak to zrobić?

Offline adsko

  • Użytkownik

# Grudzień 01, 2011, 21:22:58
Dobra już wszystko zrobiłem, dzięki za pomoc

Offline izaw

  • Użytkownik

# Grudzień 02, 2011, 02:06:29
Podaj rozwiązanie. Może komuś się przydać w podobnej sytuacji.

Offline adsko

  • Użytkownik

# Styczeń 13, 2013, 19:28:37
            request = (HttpWebRequest)HttpWebRequest.Create("https://dziennik.librus.pl/loguj");
            request.Method = "POST";
            request.Referer = "http://dziennik.librus.pl/loguj";
            request.CookieContainer = cookies;
            loginData = String.Format("login=" + login + "&passwd=" + haslo + "&ed_pass_keydown=&ed_pass_keyup=&captcha=&jest_captcha=1&czy_js=1&token=aa1");
            request.ContentType = "application/x-www-form-urlencoded";
            loginDataBytes = Encoding.ASCII.GetBytes(loginData);
            postData = request.GetRequestStream();
            postData.Write(loginDataBytes, 0, loginDataBytes.Length);
            postData.Close();
            response = (HttpWebResponse)request.GetResponse();
            resStream = response.GetResponseStream();

            reader = new StreamReader(resStream);
            input = reader.ReadToEnd();
            response.Close();
            reader.Close();
Dostałem prośbe na email aby udostępnić kod logowania, więc oto i on.
Jeżeli ktoś chce program który już działa: http://rapidshare.com/files/1130066441/Librus3.00.exe
(uwaga, podczas logowania wyskakuje błąd background workera, wtedy należy nacisnąć kontynuj)
Program nie przechowywuje/wysyła danych logowania.(czyli jest czysty:D)