logowanie do phpbb

0

Witam,
Mam pewien problem ze zwykłym logowaniem na phpbb, mam taką przykładową testową stronkę:
sileent.xup.pl
hasła testowe: test:test123

niestety przy tym logowaniu pobierany jest pewien SID który także musimy przesłać i niestety tutaj się gubie... walczyłem jakoś z ciastakami i przekazywaniem ale i tak nie działało.

Aha i jeszcze jedna, rzecz zależy mi na tym aby po logowaniu była możliwość wysłania posta na jakiś przykładowy wątek
ewentualnie jeśli ktoś ma już taką gotową funkcję i mógłby się podzielić... w google niestety zalazłem tylko niedziałające systemy logowania na phpbb bez tego sida...

0

f5

1

Pudło. Teraz ja - c7

0

Spróbuj ofapi (pierwszy link dla hasła "phpbb rpc"):
https://code.google.com/p/ofapi/

0
http://sileent.xup.pl/login.php 
username=test&password=test123&redirect=&login=Zaloguj

jesli dane sa poprawne, w naglowkach odpowiedzi masz:
Location: http://sileent.xup.pl/index.php?sid=TWOJ SID
tam jest ten Twoj SID

0

no to już niby mam, dzięki ale mimo wszystko zalogować się nie mogę...
używam takiego kodu:

public static CookieContainer login(string url, string username, string password)
        {
            if (url.Length == 0 || username.Length == 0 || password.Length == 0)
            {
                MessageBox.Show("Information Missing", "Error");
                return null;
            }

            CookieContainer myContainer = new CookieContainer();

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.CookieContainer = new CookieContainer();

            // Set type to POST

            request.Method = "POST";
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ProtocolVersion = HttpVersion.Version10;  // to get rid of the 417 error
            ServicePointManager.Expect100Continue = true; // to get rid of the 417 error

            // Build the new header, this isn't a multipart/form, so it's very simple
            StringBuilder data = new StringBuilder();
            data.Append("username=" + Uri.EscapeDataString(username));
            data.Append("&password=" + Uri.EscapeDataString(password));
            data.Append("&redirect=");
            data.Append("&login=Zaloguj");

            // Create a byte array of the data we want to send
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());

            // Set the content length in the request headers
            request.ContentLength = byteData.Length;

            Stream postStream;
            try
            {
                postStream = request.GetRequestStream();
            }
            catch (Exception e)
            {
                MessageBox.Show("Login - " + e.Message.ToString() + " (GRS)");
                return null;
            }

            // Write data
            postStream.Write(byteData, 0, byteData.Length);

            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (Exception e)
            {
                MessageBox.Show("Login - " + e.Message.ToString() + " (GR)");
                return null;
            }

            bool isLoggedIn = false;

            // Store the cookies
            foreach (Cookie c in response.Cookies)
            {
                if (c.Name.Contains("_u"))
                {
                    if (Convert.ToInt32(c.Value) > 1)
                    {
                        isLoggedIn = true;
                    }
                }
                myContainer.Add(c);
            }

            if (isLoggedIn)
            {
                return myContainer;
            }
            else
            {
                return null;
            }
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            CookieContainer boardCookies = login("http://sileent.xup.pl/login.php", "test", "test123");

            if (boardCookies != null)
                MessageBox.Show("Your Login Was Successful, Welcome :}");
            else
                MessageBox.Show("Login Failed, Recheck the Data Entered");
        } 

niestety nieskutecznie..

0

To porównaj czym się rożnią requesty wysyłane przez twój program od tych które wysyła przeglądarka przy logowaniu.

0

a polecisz jakiś program do tego?

w przeglądarce mam wtyczkę a tak żeby zobaczyć zdalnie co z programu idzie?

1

Charles/Fiddler.

Do przegladarek tez na pewno są odpowiednie wtyczki.

0

Ja bym to widział tak. Trochę już tam masz zrobione.

public class HTTPClient
{
	public CookieContainer Cookies { get; set; } //new

	public string GetResponse(string Url, string PostData = "")
	{
		/*
			HttpWebRequest
			dodaj naglowki: accept, seragent, accept encoding, 
			ustaw automaticdecompression, timeout, allowautoredirect, cookiecontainer - Cookies
			
			ustaw metode GET, POST (jesli PostData jest puste to bedzie get..
			jesli post dodaj ContentType:application/x-www-form-urlencoded
			zapisz do strumemia PostData
			
			HttpWebResponse
			dodaj ciastka do Cookies
		
			uzyj StreamReader do odczytania strony :}
			
			zwroc kod strony
		*/
	}
}

public class XupClient : IDisposable
{
	private HTTPClient httpClient = new HTTPClient();
	
	public void LogIn(string Login, string Password) 
	{
		//uzywasz tak:
		this.httpClient.GetResponse("http://sileent.xup.pl/login.php "); //pobierasz strone logowania		
        string Data = this.httpClient.GetResponse("http://sileent.xup.pl/login.php ", string.Concat("username=", HttpUtility.UrlEncode(Login), "&password=", HttpUtility.UrlEncode(Password), "&redirect=&login=Zaloguj"));
        
		if (!Data.Contains("href=\"login.php?logout=true")) //sprawdzacz czy sie zalogowalo
            throw new Exception("Błedny login lub hasło");
	}
	
	public void LogOut() {} //pobierasz link ktory wyloguje, potrzebne jest tutaj SID, ktore wyciagniesz ze strony po zalogowaniu
	public void SendPost(string Forum, string Subject, string Message) {} //wysylanie wiadomosci: wchodzisz na forum, wchodzisz na strone tworzenia postu, wysylasz POST z wiadomoscia
}

a XupClient uzywasz tak:

			try
            {
                using (XupClient xupClient = new XupClient())
                {
                    xupClient.LogIn("test", "test123");
                    xupClient.SendPost("1", "temat", "wiadomosc"); //1- id forum
                    xupClient.LogOut();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

i gra :}

To tylko zarys programu, nie ma nic za free :DD A coś tam już masz zrobione to sobie chyba zrobisz.

0

już gra gitara :D wszystko cacy ;) dzieki

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